如何在反映表时停止 sqlalchemy 或 pyodbc 将 bigint 转换为数字?

问题描述 投票:0回答:1

我正在尝试反映 SQL Server 数据库中的表。其中一个表有一个 id 列,类型为 bigint,并以下限值 -9223372036854775808 开头。在反思过程中我意识到,我得到了

DataError: (pyodbc.DataError) ('22003', '[22003] [Microsoft][ODBC Driver 18 for SQL Server][SQL Server]Arithmetic overflow error converting bigint to data type numeric. (8115) (SQLExecDirectW)')

错误,显然它试图将 bigint 下转换为数字。有办法防止这种情况吗?或者给出我在转换为数字时想要的精度?

我尝试了不同的方法:

  1. 自动反映所有表格:
engine = create_engine(db connection)
Base = automap_base()
Base.prepare(autoload_with=engine)

也可以通过创建表格:

from sqlalchemy import create_engine, MetaData, Table
from sqlalchemy import BigInteger

metadata = MetaData()

# reflect the table
table = Table('OEData', metadata, autoload_with=engine)

在这两种情况下我都会遇到上面显示的相同错误。

我正在使用:

sqlalchemy 2.0.21

MS SQL 服务器 2014

谢谢

python database sqlalchemy pyodbc
1个回答
0
投票

您在 SQLAlchemy 的 mssql 反射代码中遇到了错误。这里已经报道了

https://github.com/sqlalchemy/sqlalchemy/issues/10504

© www.soinside.com 2019 - 2024. All rights reserved.