sqlite3.InterfaceError: 错误绑定参数2 - 可能是不支持的类型

问题描述 投票:0回答:1

当我想从我的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()
python sql sqlite tkinter
1个回答
0
投票

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 变成适当的Python对象,它与Sqlite3兼容。Date 在运行insert查询之前,要先确定格式。

根据问题的编辑更新:

如果列名为 "到期日",数据类型为 "到期日"。TEXT那么列的定义应该是这样的。"Expiry Date" TEXT NOT NULL.

© www.soinside.com 2019 - 2024. All rights reserved.