使用以下方法将数据插入数据库QtSql.QSqlQuery()
:
query = QSqlQuery()
query.prepare("INSERT INTO person (id, forename, surname) "
"VALUES (:id, :forename, :surname)")
query.bindValue(":id", 1001)
query.bindValue(":forename", "Bart")
query.bindValue(":surname", "Simpson")
query.exec_()
问题:如果数据如何插入BLOB
?
如果可能的话,一个小例子。我从逻辑上理解需要翻译成什么BLOB
,然后插入一个变量......
最小的例子:
from PySide2 import QtSql
import os
def convertToBinaryData(file_path):
# Конвертирование в BLOB
with open(file_path, 'rb') as file:
blobData = file.read()
print()
return blobData
def createConnection():
db = QtSql.QSqlDatabase.addDatabase("QSQLITE")
db.setDatabaseName("local_base.db") # !!! .db
if not db.open():
print("Cannot establish a database connection")
return False
return db
# Получим данные BLOB
# картинка test_BLOB.jpg рядом с файлом скрипта
file_path = (f"{os.getcwd()}\\test_BLOB.jpg")
test_BLOB = convertToBinaryData(file_path)
db = createConnection()
db.transaction()
q = QtSql.QSqlQuery()
q.exec_("DROP TABLE IF EXISTS company;")
q.exec_("CREATE TABLE company ("
"id INT PRIMARY KEY, "
"name_company TEXT NOT NULL, "
"blob_data BLOB NOT NULL );")
# Вставка тестовых значений
query = QtSql.QSqlQuery()
query.prepare("INSERT INTO company (id, name_company, blob_data) "
"VALUES (:id, :name_company, :blob_data)")
query.bindValue(":id", 1)
query.bindValue(":name_company", 'АО КОПЫТА')
query.bindValue(":blob_data", test_BLOB)
query.exec_()
db.commit()
if __name__ == '__main__':
print("Запуск")
id
name_company
它插入底座,但不插入BLOB
。
试试这样:
一般来说,我不知道这有多正确,但是在 convertToBinaryData 函数的结果之后,您需要另外通过 QtCore.QByteArray 传递 blobData 并将其插入到 INSERT INTO 中。然后一切都被显着插入,但这是一个纯粹直观的解决方案)