【问题标题】:Error binding parameter 0 - probably unsupported type错误绑定参数 0 - 可能是不受支持的类型
【发布时间】:2015-04-03 22:57:43
【问题描述】:

我正在创建一个 SQL 数据库并尝试迭代一个 excel 文件并将所有数据放入 SQL 表中,如下所示,但我一直收到一个烦人的错误。我查看了数据类型,但仍然无法理解,如果有人发现我的代码有什么问题,请告诉我:

import sqlite3
from openpyxl import load_workbook

#wb = load_workbook(r"LeaguePlayers.xlsx")

#read workbook to get data
wb = load_workbook(filename = r"LeaguePlayers.xlsx", use_iterators = True)
ws = wb.get_sheet_by_name(name = 'Sheet1')
#ws = wb.worksheets



conn = sqlite3.connect("players.db") # or use :memory: to put it in RAM

cursor = conn.cursor()

# create a table
cursor.execute("""CREATE TABLE players
              (player TEXT,
               team TEXT,
               points INTEGER, 
               cost REAL,
               position TEXT) 
           """)


#Iterate through worksheet and print cell contents
for row in ws.iter_rows():
    for cell in row:
        cursor.execute("INSERT INTO players VALUES (?,?,?,?,?)", row)

    conn.commit()

#----------------------------------------
# display SQL data
#----------------------------------------
c.execute('SELECT * FROM players')
for row in c:
    print (row)

我得到的错误是:

cursor.execute("INSERT INTO player VALUES (?,?,?,?,?)", row) sqlite3.InterfaceError:错误绑定参数 0 - 可能是不受支持的类型。

【问题讨论】:

    标签: sqlite python-3.4 openpyxl


    【解决方案1】:

    我真的认为你需要对 Python 做一些介绍。

    您犯了两个基本错误:将 cells 循环成一行,但将 row 传递给查询;传递复杂对象,而不是原生 Python 类型,例如整数或字符串。

    您想要的是以下内容:

    player = [cell.value for cell in row]
    cursor.execute(query, player)
    

    注意,execute 需要一个序列(元组或列表)作为第二个参数。

    【讨论】:

    • 是的,我是新手。但我正在努力加快使用 sqlite 的速度以及如何将数据从 excel 中获取到表格中。我花了几天时间弄乱了 sqlite 和 openpyxl,所以无论如何我都不是专家。感谢您的回复,但当我的程序中没有任何内容引用“查询”时,我无法理解“查询”的作用。如果我的菜鸟错误冒犯了你,我提前道歉。
    • 对不起,你的意思是查询我的插入查询是我的错误。
    • query 是您要运行的 SQL 语句。我只写了伪代码供你参考。在执行查询之前定义查询是相当普遍的做法。周围有很多很好的 Python 教程。你应该花一些时间在它们上面,或者买一本 Python Cookbook。这将为您节省大量时间和挫败感。
    • No error snow 但无法从 SQL 数据库中选择任何数据。我不认为它将数据输入到数据库中。谢谢,我会拿起python烹饪书。 python 烹饪书是否兼容python 3.4?
    • 您可能需要将更改提交到数据库。如果您写入文件,您可以使用命令行工具甚至原始文件查看数据库。应该可以识别东西。祝你好运。
    猜你喜欢
    • 2018-08-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-25
    相关资源
    最近更新 更多