sqlite3.InterfaceError: Ошибка привязки параметра 2 - возможно, неподдерживаемый тип - PullRequest
0 голосов
/ 23 апреля 2020

В настоящее время у меня возникает эта ошибка, когда я хочу вставить данные из записи в моей программе 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()

1 Ответ

0 голосов
/ 23 апреля 2020

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.

Итак, если имя столбца имеет значение «Срок действия» и тип данных Date, то определение столбца должно выглядеть следующим образом: Expiry Date NOT NULL


И, возможно, вы захотите преобразовать self.n_ExpiryDate в соответствующий объект Python, который совместим с форматом Sqlite3 Date, перед выполнением запроса вставки.

Обновление в соответствии с правкой вопроса :

Если имя столбца «Дата истечения срока действия» и тип данных TEXT, то определение столбца должно выглядеть следующим образом: "Expiry Date" TEXT NOT NULL.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...