截断表不适用于 SQL Server sqlalchemy 引擎和 pandas

新手上路,请多包涵

我可以使用 sqlalchemy 和 pandas 成功查询和插入数据:

 from sqlalchemy import create_engine
import pandas as pd
engine = create_engine('mssql://myserver/mydb?driver=SQL+Server+Native+Client+11.0?trusted_connection=yes')

读取临时表:

 sql_command = """
select top 100 * from tempy
"""

df = pd.read_sql(sql_command, engine)
print df

   tempID  tempValue
0       1          2

添加新数据:

 df_append = pd.DataFrame( [[4,6]] , columns=['tempID','tempValue'])
df_append.to_sql(name='tempy', con=engine, if_exists = 'append', index=False)

df = pd.read_sql(sql_command, engine)
print df

   tempID  tempValue
0       1          2
1       4          6

尝试 截断数据:

 connection = engine.connect()
connection.execute( '''TRUNCATE TABLE tempy''' )
connection.close()

再次读取表,但截断失败:

 df = pd.read_sql(sql_command, engine)
print df

   tempID  tempValue
0       1          2
1       4          6

原文由 scottlittle 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 756
2 个回答

这对我有用:

 from sqlalchemy.orm import sessionmaker
Session = sessionmaker(bind=engine)
session = Session()
session.execute('''TRUNCATE TABLE tempy''')
session.commit()
session.close()

原文由 scottlittle 发布,翻译遵循 CC BY-SA 3.0 许可协议

我对 pandas 1.1.5 同样的问题。

正如我所见 autocommit —在运行 TRUNCATE 语句时没有被强制在 engine.execute() —中。如果我手动强制它那么 TRUNCATE 完美地工作:

 from sqlalchemy.sql import text as sa_text

engine.execute(sa_text('''TRUNCATE TABLE tempy''').execution_options(autocommit=True))

DROP 无需强制即可完美运行 autocommit

原文由 ragesz 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题