pyqt5 使用sqlite3读取图片储存到数据库中以及从数据库中读取图片显示
import sqlite3
from PyQt5.QtWidgets import QApplication, QLabel, QMainWindow, QVBoxLayout, QWidget
from PyQt5.QtSql import QSqlDatabase, QSqlQuery
from PyQt5.QtCore import QByteArray
from PyQt5.QtGui import QImage, QPixmap
class MainWindow(QMainWindow):
def __init__(self):
super().__init__()
self.setWindowTitle("SQLite 图片存取示例")
self.setGeometry(100, 100, 600, 400)
self.imageLabel = QLabel(self)
self.vbox = QVBoxLayout()
self.vbox.addWidget(self.imageLabel)
widget = QWidget()
widget.setLayout(self.vbox)
self.setCentralWidget(widget)
self.createConnection()
self.readImageFromDB()
def createConnection(self):
self.db = QSqlDatabase.addDatabase("QSQLITE")
self.db.setDatabaseName("example.db")
self.db.open()
query = QSqlQuery()
query.exec_("CREATE TABLE IF NOT EXISTS images (id INTEGER PRIMARY KEY, data BLOB);")
def storeImageToDB(self, imagePath):
with open(imagePath, "rb") as f:
data = f.read()
query = QSqlQuery()
query.exec_("INSERT INTO images (data) VALUES (?)")
query.addBindValue(QByteArray(data))
if query.exec_():
print("图片存储成功")
else:
print("图片存储失败: ", query.lastError().text())
def readImageFromDB(self):
query = QSqlQuery()
query.exec_("SELECT data FROM images ORDER BY id DESC LIMIT 1")
if query.next():
data = query.value(0)
image = QImage.fromData(data)
self.imageLabel.setPixmap(QPixmap.fromImage(image))
self.imageLabel.resize(image.width(), image.height())
else:
print("读取图片失败: ", query.lastError().text())
if __name__ == "__main__":
app = QApplication([])
window = MainWindow()
window.show()
app.exec_()
这段代码演示了如何在PyQt5中使用SQLite数据库存储和读取图片。首先,它创建了一个数据库连接,并检查是否存在images表,如果不存在,则创建它。然后,它展示了如何将图片存储到数据库中,以及如何从数据库中读取最后一个存储的图片并在QLabel中显示。
评论已关闭