【问题标题】:Error: can only concatenate str (not "list") to str错误:只能将 str(不是“列表”)连接到 str
【发布时间】:2020-01-25 15:01:47
【问题描述】:

我正在尝试将txt文件导入sql,但出现错误:

TypeError: 只能将 str(不是“list”)连接到 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 是字符串列表,而不是字符串。您可以使用 ', '.join 创建逗号分隔列表,但这不是您创建参数化查询的方式。
  • cursor.execute("INSERT INTO Pomiary_Obwod_90(Znacznik, Pomiar_x, Pomiar_y, Pomiar_z) VALUES (%s, %s, %s, %s), data)
  • 始终共享整个错误消息。您从该错误消息中了解到什么?我建议阅读以下文章:ericlippert.com/2014/03/05/how-to-debug-small-programs.

标签: python sql


【解决方案1】:

您不会将实际值放入参数化查询中;您可以放置​​适合您的图书馆的任何占位符。

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 负责在占位符出现的位置插入每个值,确保正确引用/转义/等等。

【讨论】:

    【解决方案2】:

    这里有几个问题。首先,正如错误所说,您试图将List(即data)直接连接到字符串。

    其次,您不应使用+ 连接您的值和查询。

    doc 说:

    警告:从不、从不、从不使用 Python 字符串连接 (+) 或字符串参数插值 (%) 将变量传递给 SQL 查询字符串。甚至在枪口下也没有。

    您应该只通过%s 将值传递给查询。

    我不确定在cursor.execute(query, *data) 中在data 前面使用*

    这是一个应该可以工作的代码,虽然我现在手头没有任何东西可以测试它:

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

    【讨论】:

      猜你喜欢
      • 2021-08-25
      • 1970-01-01
      • 2015-07-15
      • 2021-11-07
      • 2020-09-18
      • 2020-08-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多