37 lines
1.3 KiB
Python
37 lines
1.3 KiB
Python
"""Fix pub_date from article_date where article_date has real month/day"""
|
|||
|
|
import asyncio
|
||
|
|
from sqlalchemy import text
|
||
|
|
from sqlalchemy.ext.asyncio import create_async_engine
|
||
|
|
|
||
|
|
DATABASE_URL = 'postgresql+asyncpg://scilit:scilit_prod_2026@postgres:5432/scilit'
|
||
|
|
|
||
|
|
async def main():
|
||
|
|
engine = create_async_engine(DATABASE_URL)
|
||
|
|
async with engine.connect() as conn:
|
||
|
|
# Preview
|
||
|
|
r = await conn.execute(text("""
|
||
|
|
SELECT id, pmid, pub_date, article_date FROM global_literature
|
||
|
|
WHERE EXTRACT(MONTH FROM pub_date)=1 AND EXTRACT(DAY FROM pub_date)=1
|
||
|
|
AND article_date IS NOT NULL
|
||
|
|
AND NOT (EXTRACT(MONTH FROM article_date)=1 AND EXTRACT(DAY FROM article_date)=1)
|
||
|
|
"""))
|
||
|
|
rows = r.all()
|
||
|
|
print(f'Found {len(rows)} records to fix via article_date:')
|
||
|
|
for row in rows[:10]:
|
||
|
|
print(f' pmid={row.pmid} {row.pub_date} -> {row.article_date}')
|
||
|
|
|
||
|
|
# Fix
|
||
|
|
fixed = 0
|
||
|
|
for row in rows:
|
||
|
|
await conn.execute(
|
||
|
|
text("UPDATE global_literature SET pub_date = :ad, updated_at = NOW() WHERE id = :id"),
|
||
|
|
{"ad": row.article_date, "id": row.id},
|
||
|
|
)
|
||
|
|
fixed += 1
|
||
|
|
await conn.commit()
|
||
|
|
print(f'\nFixed {fixed} records')
|
||
|
|
|
||
|
|
await engine.dispose()
|
||
|
|
|
||
|
|
asyncio.run(main())
|