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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM