无法使用sqlite和pyqt将数据插入数据库

Can't INSERT data into database using sqlite and pyqt

我正在使用 Pycharm 2017.3。我的 python 版本是 3.4.
我正在尝试使用 sqlite4 和 pyqt 将数据插入 table。
我已成功创建 table 但无法插入任何数据。

这是我要导入的内容

from PyQt4.QtGui import *
site_pack_path = "C:\Python34\Lib\site-packages"
QApplication.addLibraryPath('{0}\PyQt4\plugins'.format(site_pack_path))
from PyQt4.QtSql import *
from PyQt4.QtCore import *
import sys
from urllib.request import Request, urlopen

这是我创建 table

的方法
query.exec_("CREATE TABLE dictin(ID INTEGER PRIMARY KEY AUTOINCREMENT, "
            "word varchar(100), searchShortDefn varchar(300),mnemonics varchar(500), "
            "defArr varchar(500), defDict varchar(500))")

然后有一个函数,其目的是向 table 中插入数据,但该函数不起作用。

def getWordsAndInsert(word, searchShortDefn, mnemonics, defArr, defDict):

    word=str(word)
    searchShortDefn=str(searchShortDefn)
    mnemonics=str(mnemonics)
    defArr=str(defArr)
    defDict=str(defDict)
    print(query.exec_("INSERT INTO dictin(word, searchShortDefn, mnemonics, defArr, defDict) "
                      "VALUES(word, searchShortDefn, mnemonics, defArr, defDict)"))

如您所见,我已将所有内容都转换为字符串,因为我的内容不是字符串。 传递给 getWordsAndInsert 方法的参数类型是

 class 'str'
 class 'str' 
 class 'str' 
 class 'list'
 class 'list'

分别

这里是函数 getWordsAndInsert 被调用的例子

getWordsAndInsert("abbreviate",
              "shorten",
              "abbreviate consists of brevity(means brief)",
              ['(verb) reduce in scope while retaining essential elements', '(verb) shorten'],
              [{'syn': ['renounce'], 'sent': ['The King abdicated when he married a divorcee']}]) 

虽然我可以在用实际字符串替换变量时插入,但显然它没有完成工作。

 print(query.exec_("INSERT INTO dictin(word, searchShortDefn, mnemonics, defArr, defDict) "
                  "VALUES('word', 'searchShortDefn', 'mnemonics', 'defArr', 'defDict')"))

要在查询中建立值,我们可以使用 prepare(), where we establish placeholders for the data, these placeholders we fill in through bindValue():

def getWordsAndInsert(word, searchShortDefn, mnemonics, defArr, defDict):
    word = str(word)
    searchShortDefn = str(searchShortDefn)
    mnemonics = str(mnemonics)
    defArr = str(defArr)
    defDict = str(defDict)

    query = QSqlQuery()
    query.prepare("""INSERT INTO dictin (word, searchShortDefn, mnemonics, defArr, defDict)
        VALUES (:word, :searchShortDefn, :mnemonics, :defArr, :defDict)""")

    query.bindValue(":word", word)
    query.bindValue(":searchShortDefn", searchShortDefn)
    query.bindValue(":mnemonics", mnemonics)
    query.bindValue(":defArr", defArr)
    query.bindValue(":defDict", defDict)

    if query.exec_():
        print("Successful")
    else:
        print("Error: ", query.lastError().text())