python - 如何将列表中的数据动态添加到数据库(PostgreSQL)
问题描述
数据库已经创建(PostgreSQL)
有一个清单:
data =
['param_1', 0],
['amp', 0],
['voltage', 1],
['params', 1],
['antenna', 1],
['freq', 0.00011000000085914508]
我试过了
import psycopg2
from psycopg2 import sql
with psycopg2.connect(dbname='db_name', user='postgres',
password='123', host='localhost') as conn:
conn.autocommit = True
with conn.cursor() as cur:
query = "INSERT INTO table_name (%s) VALUES (%s);"
cur.executemany(query, data)
我需要在数据库的表中插入值,其中包含名为:'param_1': 'paRam_2' e.t.c.
如何生成查询字符串?
我很乐意为您提供任何帮助,在此先感谢,堆栈。
解决方案
参数替换只能用于传递列值,而不是列名,因此我们需要构建一个列名列表以插入到 SQL 命令文本中。具体来说,我们需要
- 构建以逗号分隔的列名字符串
- 构建以逗号分隔的参数占位符字符串
- 创建INSERT命令,包括上面两项
- 创建(数字)参数值的元组
- 执行命令
看起来像这样:
# create environment
# ~~~~~~~~~~~~~~~~~~
data = (
['param_1', 0],
['amp', 0],
['voltage', 1],
['params', 1],
['antenna', 1],
['freq', 0.00011000000085914508]
)
# example code
# ~~~~~~~~~~~~
columns = ','.join([f'"{x[0]}"' for x in data])
print(columns)
# "param_1","amp","voltage","params","antenna","freq"
param_placeholders = ','.join(['%s' for x in range(len(data))])
print(param_placeholders)
# %s,%s,%s,%s,%s,%s
sql = f"INSERT INTO table_name ({columns}) VALUES ({param_placeholders})"
print(sql)
# INSERT INTO table_name ("param_1","amp","voltage","params","antenna","freq") VALUES (%s,%s,%s,%s,%s,%s)
param_values = tuple(x[1] for x in data)
print(param_values)
# (0, 0, 1, 1, 1, 0.00011000000085914508)
cur.execute(sql, param_values)
推荐阅读
- python - 将光源添加到表面
- javascript - 在 componentDidMount 中模拟 axios 调用时无法调用 .then
- python - 在某些情况下,列表在传递给函数时不会发生变化
- java - 对象已成功添加到 Java ArrayList,但在尝试检索该 ArrayList 时,它返回空列表
- javascript - NODE.JS 应用程序在通过 api 获取 250 万条记录时卡住了
- oracle-adf - [ADF]如何根据列宽调整输入框宽度
- c# - ASP.NET Core 2.1 错误:无法使用类 Controller、属性 ViewData
- java - 使用java for循环将多个数据插入数据库
- elasticsearch - 我可以定义要快照的分片吗?
- python-3.x - 通过硒单击“更多”按钮