【问题标题】:sqlite3.InterfaceError: Error binding parameter 2 - probably unsupported typesqlite3.InterfaceError:错误绑定参数 2 - 可能不支持的类型
【发布时间】:2020-04-23 14:25:49
【问题描述】:

当我想从我的 tkinter 程序的条目中插入数据时,我目前遇到了这个错误。我不知道错误是什么,我无法理解这个错误。

    from tkinter import *
    from tkinter import messagebox as ms
    from tkinter import ttk
    import sqlite3
    from PIL import Image,ImageTk
    import datetime

    with sqlite3.connect('Gym.db') as db:
        c = db.cursor()

    c.execute('CREATE TABLE IF NOT EXISTS PaymentInfo (FirstName TEXT, LastName TEXT, CardNumber TEXT NOT NULL, NameCard TEXT NOT NULL, ExpiryDate TEXT NOT NULL, CVC TEXT NOT NULL);')

        class main:
            def __init__(self,master):


                self.master = master
                # Some Usefull variables
                self.FirstName = StringVar()
                self.LastName = StringVar()

                self.n_FirstName = StringVar()
                self.n_LastName = StringVar()

                self.CardNumber = StringVar()
                self.NameCard = StringVar()
                self.ExpiryDate = StringVar()
                self.cvc = StringVar()

                self.n_CardNumber = StringVar()
                self.n_NameCard = StringVar()
                self.n_ExpiryDate = StringVar()
                self.n_cvc = StringVar()

def payment_insert(self):

        with sqlite3.connect('Gym.db') as db:
            c = db.cursor()

        sql2 = "INSERT INTO 'PaymentInfo' (FirstName, LastName,CardNumber,NameCard,ExpiryDate,CVC) VALUES (?,?,?,?,?,?)"
        c.execute(sql2,(self.n_FirstName.get(),self.n_LastName.get(),self.n_CardNumber.get(),self.n_NameCard.get(),self.n_ExpiryDate,self.n_cvc.get()))

        db.commit()
        db.close()

【问题讨论】:

  • self.n_ExpiryDatec.execute(sql2, ....) 中应该是self.n_ExpiryDate.get()

标签: python sql sqlite tkinter


【解决方案1】:

Expiry Date TEXT NOT NULL 您的PaymentInfo 表创建语句的一部分

c.execute('CREATE TABLE IF NOT EXISTS PaymentInfo (FirstName TEXT, LastName TEXT, CardNumber TEXT NOT NULL, NameCard TEXT NOT NULL, Expiry Date TEXT NOT NULL, CVC TEXT NOT NULL);')

不正确。

插入查询

sql2 = "INSERT INTO 'PaymentInfo' (FirstName, LastName,CardNumber,NameCard,Expiry,CVC) VALUES (?,?,?,?,?,?)"

似乎列名是Expiry

因此,如果列名称为“Expiry”且数据类型为 Date,则列定义应如下所示:Expiry Date NOT NULL


您可能希望在运行插入查询之前将self.n_ExpiryDate 转换为与Sqlite3 Date 格式兼容的适当Python 对象。

根据对问题的修改进行更新

如果列名称为“到期日期”且数据类型为 TEXT,则列定义应如下所示:"Expiry Date" TEXT NOT NULL

【讨论】:

    猜你喜欢
    • 2020-02-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-04
    相关资源
    最近更新 更多