python - 使用 sqlalchemy、pyodbc 向数据库中的表添加新列

标签 python pandas sqlalchemy pyodbc

cnx=sqlalchemy.create_engine("mssql+pyodbc://Omnius:<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="0f426e66614d7d6e66613e4f3e383d213c3e213e393c213e3c3a" rel="noreferrer noopener nofollow">[email protected]</a>:1433/Basis?driver=/opt/microsoft/sqlncli/lib64/libsqlncli-11.0.so.1790.0")
cnx1 = pyodbc.connect('driver=/opt/microsoft/sqlncli/lib64/libsqlncli-11.0.so.1790.0;server=SRVWUDEN0835;database=Basis;uid=Omnius; pwd=MainBrain1')
sqlquery = "select top 10 TXN_KEY,SEND_AGENT,PAY_AGENT from Pretty_Txns"
cursor = cnx1.cursor()
df = pd.read_sql(sqlquery,cnx)
model_columns = df.columns.tolist()
 db_columns  = cursor.execute("select TXN_KEY,SEND_AGENT from result").fetchall()
 columns = [column[0] for column in cursor.description]
  to_create =list(set(model_columns) -set(columns))
  for c in to_create:
        a = df[c]
        sql = DDL('ALTER TABLE %s ADD column %s  %s' % (result,a,String(9)))
         cnx.execute(sql)

sqlalchemy.exc.ProgrammingError: (pyodbc.ProgrammingError) ('42000', "[42000] [Microsoft][SQL Server Native Client 11.0][SQL Server]Incorrect syntax near the keyword 'column'. (156) (SQLExecDirectW)") [SQL: u"ALTER TABLE result ADD column ['API352676', 'AED002782', 'ACB020203', 'ASE094882', 'AII071196', 'AHX012817', 'AED000438', 'AEL051943', 'ADJ031448', 'APM033226']  VARCHAR(9)"]

上面的代码展示了如何使用 sqlalchemy 和 pyodbc 将新列添加到数据库中的表中。在大多数情况下,它工作正常,但在最后一步失败。

最佳答案

您错误地构建了alter table ...添加列... SQL。

它应该如下所示(对于单列):

ALTER TABLE table_name ADD COLUMN column_name data_type(precision);

或多列:

ALTER TABLE table_name ADD COLUMN (column1_name data_type(precision), column2_name data_type(precision), column3_name data_type(precision));

我建议在一个命令中添加所有列,因为它可能会在短时间内锁定字典结构。我还建议您不要在应用程序中执行此操作,但如果可能的话,手动执行一次。如果不可能/不适用,您可以按如下方式更改代码:

'ALTER TABLE {} ADD column ({})'.format(result, ', '.join(['{} {}'.format(c, String(9)) for c in to_create]))

关于python - 使用 sqlalchemy、pyodbc 向数据库中的表添加新列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37550248/

相关文章:

python - 使用 SQLAlchemy 删除没有相关记录的行

python - Pandas to_sql 参数和性能

python - 如何在 python 中使用 tcp 套接字发送 json 对象

python - Cloud Run 上的 Django 应用无限重定向 (301)

python - pandas read_csv 节标志结束

python - 使用 .loc 访问器的 pandas 日期时间索引的 bool 掩码

python - 在写入 pandas 数据框之前在 SqlAlchemy 中设置列​​的顺序

sqlalchemy - SQLAlchemy Core 和 ORM 兼容吗?

Python mysqldb fetchmany 无法正常工作

python - 为什么我在使用 boto 上传文件时得到 400?