提问者:小点点

错误:只能连接str(不是列表)到str


我试图导入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()

有人知道我该如何解决吗?:)


共2个答案

匿名用户

您不必将实际值放入参数化查询中;您可以放置适合于库的占位符。

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()