链接数据库
导入库文件python
from PyQt5 import QtSql from PyQt5.QtSql import QSqlQuery
QtSql类即QT中的QSqlDatabase类,用于处理与数据库的链接
QSqlQuery类提供了执行和操做SQL语句打方法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查询 不然返回falsespa
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)来获取索引值,
code
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()操做sqlite
指令执行成功则 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)
这个函数是批处理以前准备好的指令,若是数据库不支持批处理他会本身调用exec()来模拟it
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