python - 如何使用 Sqlite3 使用列表中的值更新整个列

标签 python sqlite

我有一个本地存储在 sqlite3 数据库中的数据集。我提取了一列,执行了一些操作,现在想替换数据库列中的所有值。我该怎么做?

列的长度和列表的长度保证相同。我只想用新值更新表。有没有一种简单的方法可以一次完成所有这些操作?

使用 python 2.7

编辑添加:

myList 是一个由 dtype 'object' 的 numpy 数组支持的 pandas 系列。表格列 myCol 是文本格式。

In [1]: curr.execute('UPDATE test SET myCol= ?', myList)

---------------------------------------------------------------------------
ProgrammingError                          Traceback (most recent call last)
f:\python\<ipython-input-52-ea41c426502a> in <module>()
----> 1 curr.execute('UPDATE test SET myCol = ?', myList)

ProgrammingError: Incorrect number of bindings supplied. The current statement uses 1, and there are 401125 supplied.

最佳答案

使用 .executemany() method相反:

curr.executemany('UPDATE test SET myCol= ?', myList)

但是,myList 必须 是这里的元组序列。如果不是,生成器表达式将创建这些元组:

curr.executemany('UPDATE test SET myCol= ?', ((val,) for val in myList))

演示(带插入):

>>> import sqlite3
>>> conn=sqlite3.connect(':memory:')
>>> conn.execute('CREATE TABLE test (myCol)')
<sqlite3.Cursor object at 0x10542f1f0>
>>> conn.commit()
>>> myList = ('foo', 'bar', 'spam')
>>> conn.executemany('INSERT into test values (?)', ((val,) for val in myList))
<sqlite3.Cursor object at 0x10542f180>
>>> list(conn.execute('select * from test'))
[(u'foo',), (u'bar',), (u'spam',)]

请注意,对于 UPDATE 语句,您必须有一个WHERE 语句来识别要什么行更新。没有WHERE 过滤器的UPDATE 将更新所有 行。

确保您的数据有行标识符;在这种情况下,使用命名参数可能更容易:

my_data = ({id=1, value='foo'}, {id=2, value='bar'})
cursor.executemany('UPDATE test SET myCol=:value WHERE rowId=:id', my_data)

关于python - 如何使用 Sqlite3 使用列表中的值更新整个列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15688462/

相关文章:

python - 迁移期间的 Django NodeNotFoundError

ios - SQLite 使用 select 语句的结果更改表

python - IOError : [Errno 2] - Can permissions cause an IOError Errno 2 when using open()

python - Docker中的大尺寸python图像

python - 在 Python 函数之外返回一个计数器

sql - 表别名的范围是什么?

python - Django 的 on_delete 错误

python - 在heroku上部署selenium(未检测到Chrome二进制文件)

c++ - Qt 5.9.1 SQLite Vacuum 出错?

python - 在apsw上复现pysqlite的row_factory