无法使用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())
我正在使用 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())