【问题标题】:Create table and Insert to SQL Server using Python使用 Python 创建表并插入到 SQL Server
【发布时间】:2021-01-24 07:41:45
【问题描述】:

我有一个巨大的表(147 列),我想知道是否可以从我的 pandas 数据框在 SQL Server 中创建表,因此我不必为 147 列使用CREATE TABLE

我正在尝试遵循大多数相关问题的回答:

params = urllib.parse.quote_plus("DRIVER={ODBC Driver 17 for SQL Server};SERVER=DESKTOP-LFOSSEF;DATABASE=test;UID=xxxx;PWD=xxx")
engine = create_engine("mssql+pyodbc:///?odbc_connect=%s" % params)
connection = engine.raw_connection()
df.to_sql("table_name", connection,index=False)

userpassword 有效,因为这是我用来登录 sqlserver 的。

当我运行它时,我得到:

sql 'SELECT name FROM sqlite_master WHERE 执行失败 type='table' AND name=?;': ('42S02', "[42S02] [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]无效的对象名称'sqlite_master'。 (208) (SQLExecDirectW); [42S02] [Microsoft][用于 SQL 的 ODBC 驱动程序 17 服务器][SQL Server]无法准备语句。 (8180)")

如果我删除connection = engine.raw_connection() 并直接使用engine,我会得到:

AttributeError: 'Engine' 对象没有属性 'cursor'

知道有什么问题吗?我需要先创建一个空表吗?我已经排查了好几个小时,但找不到任何原因导致这不起作用。

【问题讨论】:

  • engine 作为第二个参数传递给to_sql() 应该可以工作。你使用的是什么版本的 SQLAlchemy 和 pandas?
  • 分别使用('1.3.22', '0.25.3')
  • 什么是type(engine)
  • sqlalchemy.engine.base.Engine,虽然不知道如何到达sqlalchemy
  • 那是正确的类型。 This code 对我来说很好。也许您的 SQLAlchemy 安装已损坏。你可以试试pip uninstall sqlalchemy,然后是pip install sqlalchemy,看看是否有帮助。

标签: python sql-server sqlalchemy pyodbc


【解决方案1】:

这样做。

import pyodbc

engine = "mssql+pyodbc://Your_Server_Name/Your_DB_Name?driver=SQL Server Native Client 11.0?trusted_connection=yes"

df.to_sql(x, engine, if_exists='append', index=True)

df = 数据框的名称 & x = SQL Server 中表的名称

【讨论】:

  • 有两个问号导致我失败了。将第二个更改为 & 就可以了!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-04-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多