21 lines
753 B
Python
21 lines
753 B
Python
from __future__ import annotations
|
||
|
||
from typing import Any
|
||
|
||
from sqlalchemy import Table
|
||
from sqlalchemy.dialects import postgresql, sqlite
|
||
from sqlalchemy.ext.asyncio import AsyncSession
|
||
|
||
|
||
def insert_for(session: AsyncSession, table: Table) -> Any:
|
||
"""INSERT нужного диалекта — у обоих есть on_conflict_do_update/excluded.
|
||
|
||
Postgres — прод, SQLite — локальная разработка; других БД не ждём.
|
||
"""
|
||
dialect = session.get_bind().dialect.name
|
||
if dialect == "postgresql":
|
||
return postgresql.insert(table)
|
||
if dialect == "sqlite":
|
||
return sqlite.insert(table)
|
||
raise RuntimeError(f"Upsert не поддержан для диалекта {dialect!r}.")
|