首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法使用sqlite和pyqt将数据插入数据库

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

Stack Overflow用户
提问于 2018-01-04 01:05:40
回答 1查看 1.4K关注 0票数 2

我正在使用Pycharm 2017.3。我的python版本是3.4。

我试图使用sqlite4和pyqt将数据插入到表中。

我已经成功地创建了一个表,但是连一个数据都无法插入。

这是我要进口的东西

代码语言:javascript
复制
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

下面是我如何创建一个表

代码语言:javascript
复制
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))")

然后有一个函数,其目的是将数据插入到不起作用的表中。

代码语言:javascript
复制
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)"))

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

代码语言:javascript
复制
 class 'str'
 class 'str' 
 class 'str' 
 class 'list'
 class 'list'

分别使用。

下面是调用函数getWordsAndInsert的示例

代码语言:javascript
复制
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']}]) 

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

代码语言:javascript
复制
 print(query.exec_("INSERT INTO dictin(word, searchShortDefn, mnemonics, defArr, defDict) "
                  "VALUES('word', 'searchShortDefn', 'mnemonics', 'defArr', 'defDict')"))
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-01-04 01:38:27

为了在查询中建立值,我们可以使用prepare()来为数据建立占位符,这些占位符是我们通过bindValue()填写的。

代码语言:javascript
复制
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())
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48087336

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档