sqlalchemy - 炼金术。获取插入的默认值
问题描述
前言:我的任务是将文件存储在磁盘上,文件名的一部分是时间戳。这些文件的路径存储在数据库中。多个文件可能有一个所有者实体(一条消息可以包含多个附件)。为了使事情更容易,我希望数据库中的文件路径(设置为default now()
)和磁盘上的文件具有相同的时间戳。
问题:所以插入后,我需要取回默认插入值(在大多数情况下primary_key_id
和created_datetime
)。
我试过了:
db_session # Just for clarity
<sqlalchemy.orm.session.AsyncSession object at 0x7f836691db20>
str(statement) # Just for clarity. Don't know how to get back the original python (not an SQL) statement
'INSERT INTO users (phone_number, login, full_name, hashed_password, role) VALUES (:phone_number, :login, :full_name, :hashed_password, :role)'
query_result = await db_session.execute(statement=statement)
query_result.returned_defaults_rows # Primary_key, but no datetime
[(243,)]
query_result.returned_defaults # Primary_key, but no datetime
(243,)
query_result.fetchall()
[]
我的桌子:
Base = declarative_base() # Main class of ORM; Put in config by suggestion https://t.me/ru_python/1450665
claims = Table( # TODO set constraints for status
"claims",
Base.metadata,
Column("id", Integer, primary_key=True),
我的查询
async def create_item(statement: Insert, db_session: AsyncSession, detail: str = '') -> dict:
try: # return default created values
statement = statement.returning(statement.table.c.id, statement.table.c.created_datetime)
return (await db_session.execute(statement=statement)).fetchone()._asdict()
except sqlalchemy.exc.IntegrityError as error:
# if psycopg2_errors.lookup(code=error.orig.pgcode) in (psycopg2_errors.UniqueViolation, psycopg2_errors.lookup):
detail = error.orig.args[0].split('Key ')[-1].replace('(', '').replace(')', '').replace('"', '')
raise HTTPException(status_code=422, detail=detail)
PS Sqlalchemy v 1.4
解决方案
推荐阅读
- sql - 如何在键/值 PostgreSQL json 字段中搜索?
- c# - Redis 连接池的这种实现看起来是否正确?
- postgresql - 使用 jenkins 从 sftp 服务器将数据加载到 RDS Postgresql
- android - Android Compose:在图像上绘制透明圆圈
- amazon-web-services - 使 AWS RDS 可从 Lambda 函数访问
- angular - 从组件到列表/表格的大子级的角度模板
- sql-server - SQL Server“未指定列名” - 但它是
- javascript - 按选定行的材料 ui 数据表过滤器
- javascript - 将丢失的变量推送到 dataLayer 中,保持其他所有内容不变
- docker - 尝试运行多维数据集 js 时出现此错误