我试图导入txt文件到sql,但我有一个错误:
类型错误:只能连接str(不是列表)到str
我的代码:
import psycopg2
con = psycopg2.connect(
host = "",
database="",
user = "",
password = "")
cursor = con.cursor()
with open("pom1.txt") as infile:
for line in infile:
data = line.split()
print(data)
query = ("INSERT INTO Pomiary_Obwod_90(Znacznik, Pomiar_x, Pomiar_y, Pomiar_z) VALUES"
"(" + data + ");")
cursor.execute(query, *data)
con.commit()
有人知道我该如何解决吗?:)
您不必将实际值放入参数化查询中;您可以放置适合于库的占位符。
data = line.split()
place_holders = ', '.join("%s" for _ in data) # Assuming %s is correct
query = ("INSERT INTO Pomiary_Obwod_90(Znacznik, Pomiar_x, Pomiar_y, Pomiar_z) VALUES"
"(" + place_holders + ");")
cursor.execute(query, *data)
cursor.execute负责在占位符出现的地方插入每个值,确保正确引用/转义/等。
这里有几个问题。首先,正如错误所说,您试图将List
(即data
)直接连接到字符串。
其次,您不应该使用来连接您的值和查询。
医生说:
警告:绝不,绝不,绝不使用Python字符串连接()或字符串参数插值(%)将变量传递给SQL查询字符串。甚至在枪口下也没有。
只能通过%s
将值传递给查询。
我不确定*
在光标中的
数据前面是否使用了
。*
。执行(查询,*数据)
下面是一个应该工作的代码,尽管我现在手头没有测试它的东西:
import psycopg2
con = psycopg2.connect(
host = "",
database="",
user = "",
password = "")
cursor = con.cursor()
with open("pom1.txt") as infile:
for line in infile:
data = line.split()
print(data)
query = ("INSERT INTO Pomiary_Obwod_90(Znacznik, Pomiar_x, Pomiar_y, Pomiar_z) VALUES (%s, %s, %s, %s);")
cursor.execute(query, data)
con.commit()