python - 如何使用 Pscycopg2 将字典插入 Postgresql 表
问题描述
如何将 python 字典插入 Postgresql2 表?我不断收到以下错误,因此我的查询格式不正确:
“至”第 1 行或附近的错误语法错误:INSERT INTO bill_summary VALUES(指定...
import psycopg2
import json
import psycopg2.extras
import sys
with open('data.json', 'r') as f:
data = json.load(f)
con = None
try:
con = psycopg2.connect(database='sanctionsdb', user='dbuser')
cur = con.cursor(cursor_factory=psycopg2.extras.DictCursor)
cur.execute("CREATE TABLE bill_summary(title VARCHAR PRIMARY KEY, summary_text VARCHAR, action_date VARCHAR, action_desc VARCHAR)")
for d in data:
action_date = d['action-date']
title = d['title']
summary_text = d['summary-text']
action_date = d['action-date']
action_desc = d['action-desc']
q = "INSERT INTO bill_summary VALUES(" +str(title)+str(summary_text)+str(action_date)+str(action_desc)+")"
cur.execute(q)
con.commit()
except psycopg2.DatabaseError, e:
if con:
con.rollback()
print 'Error %s' % e
sys.exit(1)
finally:
if con:
con.close()
解决方案
您应该使用字典作为cursor.execute()
. 请参阅文档中此语句之后的示例代码:
在查询中使用 %(name)s 占位符并将值指定到映射中也支持命名参数。
所以你的代码可能像这样简单:
with open('data.json', 'r') as f:
data = json.load(f)
print(data)
""" above prints something like this:
{'title': 'the first action', 'summary-text': 'some summary', 'action-date': '2018-08-08', 'action-desc': 'action description'}
use the json keys as named parameters:
"""
cur = con.cursor()
q = "INSERT INTO bill_summary VALUES(%(title)s, %(summary-text)s, %(action-date)s, %(action-desc)s)"
cur.execute(q, data)
con.commit()
另请注意此警告(来自文档的同一页面):
警告:永远,永远,永远不要使用 Python 字符串连接 (+) 或字符串参数插值 (%) 将变量传递给 SQL 查询字符串。甚至在枪口下也没有。
推荐阅读
- visual-studio-code - 如何在 package.json 中禁用“运行脚本”
- reactjs - How to obfuscate classnames using Tailwindcss Reactjs and CRACO
- sql - How to search a hierarchy in SQL
- minecraft - 有没有办法查看/访问公共 minecraft 服务器的 latest.log?
- sql-server - 如何创建查询以显示本周 sql 的每个日期的总销售额
- visual-studio - C 编译器 cl.exe 无法编译简单的测试程序
- ansible - 在 Ansible 中使用 json_query 查询包含在字典列表中的字典列表
- python - 为什么从 locals() 检索键值在列表理解中不起作用?
- electron - 错误:“请注意,'style-src-elem' 未明确设置”设置时
- php - 具有不同 MySQL 表的可重用 PHP 文件