• PyQt5之SQLite数据库操作(1)


    连接数据库

    导入库文件

    from PyQt5 import QtSql
    from PyQt5.QtSql import QSqlQuery

    QtSql类即QT中的QSqlDatabase类,用于处理与数据库的连接

    QSqlQuery类提供了执行和操作SQL语句打方法


    第一步连接sqlite数据库

    database = QtSql.QSqlDatabase.addDatabase('QSQLITE')
    database.setDatabaseName('test.db')
    
    没有test.db这个文件的时候则会在当前目录新建一个test.db文件

    打开数据库,打开成功返回True

    database.open()


    新建表

    建立一个名为student的表,包含id,name,age三个属性,其中ID为主键

    query.prepare('create table student (id int primary key, name varchar(30),age int)')
    if not query.exec_():
        query.lastError()
    else:
        print('create a table')

    插入数据

    addBindValue()将值添加到列表中,调用顺序决定添加的顺序
    insert_sql = 'insert into student values (?,?,?)'
    query.prepare(insert_sql)
    query.addBindValue(4)
    query.addBindValue('test3')
    query.addBindValue(1)
    if not query.exec_():
        print(query.lastError())
    else:
        print('inserted')


    查询

    查询返回数据使用value(int)函数,例如select id,name,age from student   value(0)等于返回id属性的值,value(2)等于age属性

    exec_()查询成功返回true查询 否则返回false

    query.prepare('select id,name,age from student')
    if not query.exec_():
        query.lastError()
    else:
        while query.next():
            id = query.value(0)
            name = query.value(1)
            age = query.value(2)
            print(id,name,age)

    可以通过record().indexOf(str)来获取索引值,

    if query.exec('select id ,name,age from student'):
        id_index = query.record().indexOf('id')
        name_index = query.record().indexOf('name')
        age_index = query.record().indexOf('age')
        while query.next():
            id = query.value(id_index)
            name = query.value(name_index)
            age = query.value(age_index)
            print(id, name, age)
    




    一:使用exec()操作

    指令执行成功则 exec_()会返回True并把查询状态设为活跃状态,否则返回false

    另外对于SQLite,查询字符串一次只能包含一条语句。如果给出多个语句,则函数返回false

    if query.exec('select id ,name,age from student'):
        while query.next():
            id = query.value(0)
            name = query.value(1)
            age = query.value(2)
            print(id, name, age)
    


    二:execBatch()操作

    这个函数是批处理之前准备好的指令,如果数据库不支持批处理他会自己调用exec()来模拟

    query.prepare('insert into student values (?,?,?)')
    query.addBindValue([6,7,8])
    query.addBindValue(['test5','test6','test7'])
    query.addBindValue([1,1,1])
    if query.execBatch():
        print("inserted ")

    三:executedQuery()返回最后一个执行成功的指令

    if query.exec('select id ,name,age from student'):
        while query.next():
            id = query.value(0)
            name = query.value(1)
            age = query.value(2)
            print(id, name, age)
            
    print(query.executedQuery())
    执行结果为:select id ,name,age from student


    四: 其他

    finish()终止当前的操作

    isActive()返回当前是否处于活跃状态
    isNull(int field)返回当前是否不活跃

    isSelect()返回是不是一个查询语句

    next()检索结果中的下一条记录(如果可用),并将查询放在检索到的记录上。请注意,结果必须处于活动状态,并且在调用此函数之前,isSelect()必须返回true,否则它将不执行任何操作并返回false。


    指令执行成功则 exec_()会返回True并把查询状态设为活跃状态,否则返回false
    努力成为一名GEEK!
  • 相关阅读:
    SQL select结果集和return的区别
    转发:上海软件公司排行 (估计是2008年的吧)
    还未复习的
    转发:IT行业中的甲方乙方关系
    多线程 异步调用委托
    用sessionStorage实现页面之间的数据传输
    【转】Vue.js:轻量高效的前端组件化方案
    几种web数据渲染模板对比
    ThinkPHP执行原生sql,实现一些复杂的业务需求
    listview可见再加载图片
  • 原文地址:https://www.cnblogs.com/FanMLei/p/10501036.html
Copyright © 2020-2023  润新知