首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >截断表不使用SQL server sqlalchemy engine和熊猫

截断表不使用SQL server sqlalchemy engine和熊猫
EN

Stack Overflow用户
提问于 2017-02-06 23:56:22
回答 4查看 38.6K关注 0票数 25

我可以使用sqlalchemy和大熊猫成功地查询和插入数据:

代码语言:javascript
复制
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')

阅读tempy表:

代码语言:javascript
复制
sql_command = """
select top 100 * from tempy
"""

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

   tempID  tempValue
0       1          2

附加新数据:

代码语言:javascript
复制
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

尝试截断数据:

代码语言:javascript
复制
connection = engine.connect()
connection.execute( '''TRUNCATE TABLE tempy''' )
connection.close()

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

代码语言:javascript
复制
df = pd.read_sql(sql_command, engine)
print df

   tempID  tempValue
0       1          2
1       4          6
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2017-02-07 19:00:47

这对我起了作用:

代码语言:javascript
复制
from sqlalchemy.orm import sessionmaker
Session = sessionmaker(bind=engine)
session = Session()
session.execute('''TRUNCATE TABLE tempy''')
session.commit()
session.close()
票数 18
EN

Stack Overflow用户

发布于 2017-05-17 15:23:50

对于pandas 0.19.2和sqlalchemy 1.1.5,我也有同样的问题。

正如我所看到的,在运行autocommit语句时,engine.execute()并不是强制的。如果我手动强制它,那么TRUNCATE就完美地工作了:

代码语言:javascript
复制
from sqlalchemy.sql import text as sa_text

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

很奇怪,DROP在没有强迫autocommit的情况下完美地工作.

票数 40
EN

Stack Overflow用户

发布于 2017-11-20 21:16:14

下面是基于这个问题的完整解决方案,在Windows I上使用sqlalchemy 1.1.15接收试图实现其他解决方案的错误:

代码语言:javascript
复制
import sqlalchemy
engine = sqlalchemy.create_engine('mssql://myserver/mydb?driver=SQL+Server+Native+Client+11.0?trusted_connection=yes')
connection = engine.connect()
truncate_query = sqlalchemy.text("TRUNCATE TABLE tempy")
connection.execution_options(autocommit=True).execute(truncate_query)
票数 12
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42079419

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档