Files
2026-09-20 11:45:58 +00:00

55 lines
2.0 KiB
Python

import csv
import asyncpg
import asyncio
from config import DB_CONFIG
async def load_all():
pool = await asyncpg.create_pool(**DB_CONFIG)
async with pool.acquire() as conn:
level_files = [
("A1", "words_a1.csv"),
("A2", "words_a2.csv"),
("B1", "words_b1.csv"),
]
total_added = 0
for level, fname in level_files:
print(f'\n{"="*50}')
print(f'Loading {fname} (level {level})...')
print(f'{"="*50}')
# 🔧 ФИКС: удаляем ВСЕ строки уровня, независимо от level_id
deleted = await conn.execute(
"DELETE FROM level_words WHERE level = $1",
level
)
print(f' Deleted old entries: {deleted}')
count = 0
with open(fname, 'r', encoding='utf-8') as f:
reader = csv.DictReader(f)
for row in reader:
word = row['polish'].strip().lower()
if word:
await conn.execute(
'''INSERT INTO level_words (level_id, word_pl, translation_ru, translation_uk, translation_en, level)
VALUES (NULL, $1, $2, $3, $4, $5)
ON CONFLICT (level, word_pl) DO NOTHING''',
word,
row.get('russian', ''),
row.get('ukrainian', ''),
row.get('english', ''),
level
)
count += 1
total_added += count
print(f' Added {count} words from {fname} (level {level})')
await pool.close()
print(f'\n🎉 Готово! Всего загружено {total_added} слов.')
if __name__ == '__main__':
asyncio.run(load_all())