持续出现“绑定参数0时出错 - 可能是不支持的类型”

1 投票
2 回答
4916 浏览
提问于 2025-04-16 12:40

我在使用 eric4(包括 qtdesigner、pyqt、python 等)和 sqlite 时,运行我写的程序时总是出现“绑定参数 0 时出错 - 可能是不支持的类型”的提示。

我用 eric4 和 qtdesigner 制作了一些图形界面,并生成了对话框代码。当我在 qtdesigner 制作的窗口中按下某个按钮时,它应该能访问数据库,然后提交并保存信息到数据库。我为访问和保存数据库单独写了一个 py 文件。

以下是我代码中最可能导致这个错误的部分。

在我导入的 ui 生成的对话框中(我引入了那个单独的 py 文件):

    def on_button_Save_released(self):
        """
        Slot documentation goes here.
        """
        # TODO: not implemented yet
        Nik = self.LineEdit_Nickname.text()
        NFirst = self.LineEdit_NameFirst.text()
        NMid = self.LineEdit_NameMiddle.text()
        NLast = self.LineEdit_NameLast.text()
        BMon = self.ComboBox_BirthMonth.currentText()
        BDay = self.ComboBox_BirthDay.currentText()
        BYear = self.ComboBox_BirthYear.currentText()
        CNum = self.LineEdit_ContactNum.text()
        EM = self.LineEdit_EMail.text()
        MAd = self.LineEdit_MailAdd.text()

        self.NMem = NewMem()
        self.NMem.input_data(Nik,  NFirst, NMid,  NLast,  BMon,  BDay,  BYear,  CNum,  EM,  MAd)

还有这个是在单独的 py 文件中访问和写入数据库的部分:

import sqlite3
import datetime, time

con = sqlite3.connect("Members.db") #access database
cur = con.cursor()  #cursor object for database


class NewMem:
    def input_data(self,  Nik,  NFirst, NMid,  NLast,  BMon,  BDay,  BYear,  CNum,  EM,  MAd):

        def adapt_datetime(ts):
            return time.mktime(ts.timetuple())

        #Get current time and date
        sqlite3.register_adapter(datetime.datetime, adapt_datetime) 
        now = datetime.datetime.now()  

        #created if first time to make a table
        try: 
            cur.execute('create table Members (ID integer primary key autoincrement not null, Nick string not null, NameFirst string, NameMiddle string, NameLast string, BirthMonth string, BirthDay string, BirthYear string, ContactNum string, EMail string, MailAdd string, MemberSince string)')
        except:
            pass

        cur.execute("insert into Members (Nick,NameFirst,NameMiddle,NameLast,BirthMonth,BirthDay,BirthYear,ContactNum,EMail,MailAdd,MemberSince) values (?,?,?,?,?,?,?,?,?,?,?)",(Nik,  NFirst, NMid,  NLast,  BMon,  BDay,  BYear,  CNum,  EM,  MAd, now))

        con.commit()
        cur.close()
        con.close()

我在谷歌上查了一些资料,发现可能是引号和 ? 参数的问题,但我检查过了,似乎是正确的。我还看到有说法是和字符映射(UTF?)有关,但老实说我不知道怎么检查……我还加了一些打印语句,看看输入的数据是否正确,结果显示是对的。所以我真的很困惑,为什么我还是会遇到这个错误。

任何帮助都非常感谢 深深鞠躬

2 个回答

1

我大致上能复现这个问题。

如果你传入一个字符串、数字,甚至是日期作为 Nik,一切都正常。但是你提到的错误只会在你传入一些奇怪的东西作为 Nik 时出现,比如一个类或者一个函数。

检查一下调用 input_data 的地方,确保传入的 Nik 是正确的。很可能在某个地方忘记加 (),导致传入了一个类或者函数,而不是它的实例或函数的结果。

3

QlineEdit.text() 会返回一个 QString 类型的值。你可以把它传给 unicode 的构造函数,这样就能得到一个可以用的东西了。

撰写回答