【问题标题】:How to add multiple Columns into Sqlite3 from a for loop in Python如何从 Python 中的 for 循环将多个列添加到 Sqlite3
【发布时间】:2016-11-18 03:07:48
【问题描述】:

诚然,对于 Python 和 Sqlite3,我还是个新手,我正在尝试将两个列表的内容添加到数据库中,以便一个列表位于第一列,第二个列表显示在第二列。至此,我一直没有成功。我肯定犯了一个基本错误,我得到的错误消息是:“sqlite3.InterfaceError: Error binding parameter 0 - 可能是不受支持的类型。”

我的代码是这样的:

import sqlite3
names = ['Tom', 'Dick', 'Harry']

ids = ['A452', 'B698', 'Kd9f']


conn = sqlite3.connect('testforinput.db')
c = conn.cursor()

c.execute("CREATE TABLE thetable(name TEXT, id TEXT)")

index = 0
for link in names:
    idofperson = ids[index]
    c.execute("INSERT INTO thetable(name, id)VALUES(?, ?)", ( [link], idofperson ))
    index+=1
conn.commit()

conn.close()

由于for循环特别是“idofperson”变量而发生错误

期望的结果是我希望在 sql 中创建两列,一列是名称,另一列是 id。

任何帮助将不胜感激。

【问题讨论】:

    标签: python for-loop sqlite


    【解决方案1】:

    我认为你只是改变

    index =0
    for link in names:
    idofperson = ids[index]
    c.execute("INSERT INTO thetable(name, id)VALUES(?, ?)", ( [link], idofperson ))
    

    为此(使用枚举并将[list] 更改为list,因为您将list 传递到需要TEXT 类型的列中):

    for index, link in enumrable(names):
    idofperson = ids[index]
    c.execute("INSERT INTO thetable(name, id)VALUES(?, ?)", ( link, idofperson ))
    

    【讨论】:

    • 我现在试试,如果它有效,请告诉你。感谢您的输入
    • 开枪!没运气!但我不对枚举做一些进一步的研究,看看这是否是这一切的关键。再次感谢
    • 不,我不在那里。您的错误是类型,因为您将“列表”参数传递到需要类型 TEXT 的列中
    【解决方案2】:

    您的变量索引没有增加。请尝试在 for 循环中使用枚举。或者在执行后添加 index += 1

    【讨论】:

    • 谢谢兄弟忘记了,我在执行语句后添加了 input+=1 但我仍然得到同样的错误:(
    • 你能不能试着去掉多余的括号
    • c.execute("INSERT INTO thetable(name, id)VALUES(?, ?)", [link], idofperson )
    【解决方案3】:

    由于您尝试推入不受支持的数据类型而发生错误,您无法按原样存储列表,您需要更改为其他支持的数据类型,我喜欢这个解决方案....它有效对我来说https://stackoverflow.com/a/18622264/6180263

    【讨论】:

      【解决方案4】:

      对于你的问题,试试这个:

      import sqlite3
      
      names = ['Tom', 'Dick', 'Harry']
      ids = ['A452', 'B698', 'Kd9f']
      data = zip(names, ids)
      conn = sqlite3.connect('testforinput.db')
      c = conn.cursor()
      c.execute("CREATE TABLE thetable(name TEXT, id TEXT)")
      
      
      for d in data:
          sql = "INSERT INTO thetable (name, id) VALUES ('%s', '%s'); " % d
          c.execute(sql)
      
      conn.commit()
      conn.close()
      

      我建议将数据更改为字典列表,例如 [{'name':'Tom', 'id': 'A452'}, {'name':'dick', 'id':'B698'}..] 并且可以按数据生成insert sql,使insert更加灵活。

      【讨论】:

        猜你喜欢
        • 2021-03-27
        • 2023-01-07
        • 2017-04-10
        • 2020-10-05
        • 2016-06-21
        • 2021-06-23
        • 2022-01-04
        • 1970-01-01
        • 2020-03-23
        相关资源
        最近更新 更多