python - 如何在 python 中使用 SQLAlchemy SQL-builder 执行 UPDATE 查询?

标签 python pandas dataframe sqlalchemy

如果有 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/

相关文章:

python - 在 Python 中读取 UDP 数据包的缓冲区大小

python - 高基数数据的挑战

python - 在文本上拆分列并将列转换为二进制类别的更有效方法

python - 如果它们之间的差异小于 pandas 中的固定值,则将行值替换为先前的值

python - 使用 Pandas 中的两个地理数据框获取最近的距离

dataframe - 在 Julia 中同时绘制两个数据框

python - 爱彼迎 Airflow : Installing Airflow without pip

Python,字符串中字符的具体计数

python - 如何在数据框中绘制行

python - 使用一致的映射跨数据框列分解值