python - 带有列表的 Psycopg2 插入语句
问题描述
我正在阅读 psycopg2 的文档:http: //initd.org/psycopg/docs/usage.html 在该文档之后,哪些插入语句被认为是正确的?
cur.execute ('INSERT INTO tb VALUES (%s, %s)', row[0:2])
cur.execute ('INSERT INTO tb VALUES (%s, %s)', (row[0:2]) )
其中“row”是 5 个元素的列表,“tb”是包含 2 列的表。
解决方案
这些实际上是同一件事,因为简单地将括号括起来并不能使其成为元组。您还需要一个尾随逗号,例如:(row[0:2],)
In [1]: row = [1,2,3]
In [2]: row[0:2]
Out[2]: [1, 2]
In [3]: (row[0:2])
Out[3]: [1, 2]
In [4]: (row[0:2],)
Out[4]: ([1, 2],)
但是要回答我认为您要问的问题:根据DB-API 的文档,.execute()
第一种选择是正确的:“参数可以作为序列或映射提供......”
cur.execute('INSERT INTO tb VALUES (%s, %s);', row[0:2])
换句话说,您提供了一个序列(在这种情况下是一个列表);而不是一个序列的序列:一个列表的元组,再次看起来像这样(row[0:2],)
:注意结尾的逗号。
推荐阅读
- docker - 无法启动表单识别器容器
- python - 自动将登录的用户插入外键
- python-3.x - 如何在 pyinstaller 中支持第三方库,如 pyzbar
- .htaccess - 如何使用 htaccess 将子域(包含所有文件夹和文件)重定向到另一个域?
- variables - 在变量/数组中使用运算符 - VBS
- python - 在另一个文件中注释 Flask-Resource
- spring - 使用嵌入式 tomcat 未在 Spring Boot 中映射请求
- php - 奏鸣曲碳库中的当年使用方法
- java - 如何在不创建 File 对象的情况下将 BufferedImage 附加到 MimeBodyPart
- python - 将变量与正则表达式变量进行比较