【发布时间】:2023-04-08 21:47:01
【问题描述】:
这个问题是关于将一条记录的插入 SQL 语句构造到一个有很多列(在我的例子中是 135 列)的表中。
在任何人分析为什么有这么多列之前,让我先简化一下:我试图以尽可能少的修改来提取原始数据,原始数据有 135 列。
现在,按照this 指南,插入记录的简单方法是:
import psycopg2
con = psycopg2.connect(<your db credentials>)
cur = con.cursor()
cur.execute("INSERT INTO STUDENT (ADMISSION,NAME,AGE,COURSE,DEPARTMENT) VALUES (3420, 'John', 18, 'Computer Science', 'ICT')");
另外请注意,如果我们在不省略任何列的情况下插入记录,那么我们不需要指定列名more details here:
cur.execute("INSERT INTO STUDENT VALUES (3420, 'John', 18, 'Computer Science', 'ICT')");
如果我们的数据保存在 python 变量中,psycopg2 允许我们这样做:
admission = 3420
name = 'John'
age = 18
course = 'Computer Science'
department = 'ICT'
cur.execute("INSERT INTO STUDENT VALUES (%s, %s, %s, %s, %s)",(admission, name, age, course, department))
但是插入具有 135 个属性的记录的推荐方法是什么? 虽然我的直觉是自己构建 SQL 查询,但文档确实指出:
警告永远,永远,永远不要使用 Python 字符串连接 (+) 或字符串参数插值 (%) 将变量传递给 SQL 查询字符串。甚至在枪口下也没有。
所以,总结一下:如何将具有任意列数的原始数据提取到表中?
【问题讨论】:
标签: python-3.x postgresql psycopg2