【发布时间】:2021-10-11 10:43:54
【问题描述】:
我正在尝试将几个表从一个数据库(“db1”,PostgreSQL)复制到另一个(“db2”,SQL Server)。 不幸的是,由于 PostgreSQL 数据库中某些字段的 BOOLEAN 类型未被识别为 SQL Server 的有效类型,我遇到了一个问题。
这是我的代码示例:
db2_engine = "postgresql+psycopg2://" + str(db2_user) + ":" + str(db2_password) + "@" + str(db2_host) + ":" + str(db2_port) + "/" + str(db2_database)
db2 = sqlalchemy.create_engine(db2_engine)
lst_tablename_totr = ["contract",
"subscription",
"contractdelivery",
"businesspartner"
]
for table_name in lst_tablename_totr:
table = Table(table_name, metadata, autoload=True, autoload_with=db2)
table.create(bind=db1)
query = """
SELECT
*
FROM """ + str(table_name) + """
"""
df_hg = pd.read_sql(query, db2_engine)
df_hg.to_sql(table_name, db1, schema='dbo', index=False, if_exists='append')
目前,问题位于代码的table = Table(table_name, metadata, autoload=True, autoload_with=db_hgzl) table.create(bind=db1) 部分。
这是错误信息:
ProgrammingError: (pyodbc.ProgrammingError) ('42000', '[42000] [Microsoft][ODBC Driver 13 for SQL Server][SQL Server]列、参数或变量 #8\xa0: 找不到数据类型 BOOLEAN。 (2715) (SQLExecDirectW)')
我找不到任何方法来强制在 PostgreSQL 布尔类型和 SQL Server 位类型之间进行转换。
【问题讨论】:
-
你说 db2 还是 MSQL 我有点困惑:
db2_engine = "postgresql+psycopg2://" -
如果您使用 Postgres ODBC,则此 Config 有一个配置设置。如果您想直接使用
psycopg2,您可以创建并注册一个type caster 以转换为int。
标签: python sql-server postgresql sqlalchemy