如果有 sqlalchemy 数据库并想要运行更新查询。我想我可以使用与 SELECT 命令相同的方法。
这是我的代码:
disk_engine = create_engine('sqlite:///test.db')
chunksize = 20000
j = 0
index_start = 1
for df in pd.read_csv('test.csv', chunksize=chunksize,
iterator=True, encoding='utf-8'):
df.index += index_start
j+=1
df.to_sql('data', disk_engine, if_exists='append')
index_start = df.index[-1] + 1
...
##NOW I WANT TO UPDATE A ROW
ts = pd.read_sql_query('UPDATE data SET score = ROUND(score,1)', disk_engine);
但这会引发错误:
result.pyc in _non_result(self, default) 918 if self._metadata is None: 919 raise exc.ResourceClosedError( --> 920 "This result object does not return rows. " 921 "It has been closed automatically.", 922 )
ResourceClosedError: This result object does not return rows. It has been closed automatically.
如何正确更新数据库?
最佳答案
如果确切的字符串 UPDATE data SET score = ROUND(score,1)
是您想要执行的内容,您应该能够从到 disk_engine
的连接执行它。例如:
sqlalchemy 1.x你可以这样做:
conn = disk_engine.connect()
result = conn.execute('UPDATE data SET score = ROUND(score,1)')
sqlalchemy 2.x,插入、更新、删除时强制事务处理:
from sqlalchemy import text
with engine.connect() as conn:
conn.execute(text('UPDATE data SET score = ROUND(score,1))')
conn.commit()
关于python - 如何在 python 中使用 SQLAlchemy SQL-builder 执行 UPDATE 查询?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38152416/