使用sqlalchemy的优点.sqlalchemy.dialects.mssql上的类型



当使用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()引用),这种方法是否有缺点-例如,速度?

我不知道这是否回答了你的问题,但使用源代码:

在sqlalchemy/lib/sqlalchemy/方言/该软件/initpy:

from .base import SMALLINT

在sqlalchemy/lib/sqlalchemy/方言/该软件/base.py

from ...types import SMALLINT

在sqlalchemy/lib/sqlalchemy types.py& lt; & lt; & lt;sqlalchemy.types.SMALLINT

from .sql.sqltypes import SMALLINT as SMALLINT

更进一步在sqlalchemy

/lib/sqlalchemy/sql/sqltypes.py

class SMALLINT(SmallInteger):
"""The SQL SMALLINT type.
.. seealso::
:class:`_types.SmallInteger` - documentation for the base type.
"""
__visit_name__ = "SMALLINT"

所以对许多人(所有人?)大写类型,使用sqlalchemy.types.XXXsqlalchemy.dialects.YYY.XXX似乎是一样的。所有大写数据类型都继承自CamelCase数据类型(ref)

最新更新