55 lines
2.0 KiB
Python
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()) |