当使用SQLAlchemy保存到SQL Server数据库时,除了可移植性之外,使用sqlalchemy.types
设置数据类型比使用sqlalchemy.dialects.mssql
更有优势吗?
我使用以下方法将数据保存到数据库中(使用pandas的to_sql()
):
df_members.to_sql(
'parliament.member_' + extract_date + '',
schema='source',
con=engine,
index=False,
dtype={
'id': sqlalchemy.dialects.mssql.SMALLINT(),
'gender': sqlalchemy.dialects.mssql.NVARCHAR(1),
'nameDisplayAs': sqlalchemy.dialects.mssql.NVARCHAR(length=256),
'nameClean': sqlalchemy.dialects.mssql.NVARCHAR(length=256),
'count': sqlalchemy.dialects.mssql.TINYINT()
},
)
我注意到下面的结果是相同的:
df_members.to_sql(
'parliament.member_' + extract_date + '',
schema='source',
con=engine,
index=False,
dtype={
'id': sqlalchemy.types.SMALLINT(),
'gender': sqlalchemy.types.NVARCHAR(1),
'nameDisplayAs': sqlalchemy.types.NVARCHAR(length=256),
'nameClean': sqlalchemy.types.NVARCHAR(length=256),
'count': sqlalchemy.dialects.mssql.TINYINT()
},
)
我习惯使用前者,因为它让我不必记住哪些数据类型是特定于供应商的(例如TINYINT()
),哪些不是。
但是,假设可移植性不是一个问题(如果我们改变了供应商,代码无论如何都需要更新以删除TINYINT()
引用),这种方法是否有缺点-例如,速度?
1条答案
按热度按时间ufj5ltwl1#
我不知道这是否能回答你的问题,但使用源代码:
在sqlalchemy/lib/sqlalchemy/dialects/mssql/init.py中:
在sqlalchemy/lib/sqlalchemy/dialects/mssql/ www.example.com中base.py
在sqlalchemy/lib/sqlalchemy/types.py**〈〈〈sqlalchemy.types.SMALLINT**
更进一步
在sqlalchemy/lib/sqlalchemy/sql/ www.example.com中sqltypes.py
因此,对于许多(所有?)大写类型,使用
sqlalchemy.types.XXX
或sqlalchemy.dialects.YYY.XXX
似乎是一样的。所有大写数据类型都继承自CamelCase数据类型(ref)