Python MySQL –在MySQL数据库中读取和更新BLOB
简介:本教程向您展示如何在Python中使用MySQL BLOB数据,包括更新和读取BLOB数据。
作者表中有一个名为photo的列,其数据类型为BLOB。
我们将从图片文件中读取数据,然后更新到"图片"列。
在Python中更新BLOB数据
首先,开发一个名为read_file()的函数来读取文件并返回文件内容:
def read_file(filename): with open(filename, 'rb') as f: photo = f.read() return photo
其次,创建一个名为update_blob()的新函数,该函数为author_id指定的作者更新照片。
from mysql.connector import MySQLConnection, Error from python_mysql_dbconfig import read_db_config def update_blob(author_id, filename): # read file data = read_file(filename) # prepare update query and data query = "UPDATE authors " \ "SET photo = %s " \ "WHERE id = %s" args = (data, author_id) db_config = read_db_config() try: conn = MySQLConnection(**db_config) cursor = conn.cursor() cursor.execute(query, args) conn.commit() except Error as e: print(e) finally: cursor.close() conn.close()
让我们详细检查一下代码:
首先,我们调用read_file()函数从文件中读取数据并返回它。
其次,我们编写UPDATE语句,以更新author_id指定的作者的照片列。
args变量是一个包含文件数据和author_id的元组。
我们将把这个变量与query一起传递给execute()方法。第三,在tryexcept块内,我们连接到数据库,实例化一个游标,并使用args执行查询。
为了使更改生效,我们调用MySQLConnection对象的commit()方法。第四,我们在finally块中关闭游标和数据库连接。
请注意,我们从MySQL Connector / Python包中导入了MySQLConnection和Error对象,并从上一教程中开发的python_mysql_dbconfig模块中导入了read_db_config()函数。
让我们测试一下update_blob()函数。
def main(): update_blob(144, "pictures\garth_stein.jpg") if __name__ == '__main__': main()
请注意,您可以使用以下照片并将其放入pictures文件夹中进行测试。
在主函数内,我们调用update_blob()函数为ID为144的作者更新照片列。
为验证结果,我们从authors表中选择数据。
SELECT * FROM authors WHERE id = 144;
它按预期工作。
在Python中读取BLOB数据
在此示例中,我们从authors表中选择BLOB数据并将其写入文件中。
首先,开发一个write_file()函数将二进制数据写入文件中:
def write_file(data, filename): with open(filename, 'wb') as f: f.write(data)
其次,创建一个名为read_blob()的新函数:
def read_blob(author_id, filename): # select photo column of a specific author query = "SELECT photo FROM authors WHERE id = %s" # read database configuration db_config = read_db_config() try: # query blob data form the authors table conn = MySQLConnection(**db_config) cursor = conn.cursor() cursor.execute(query, (author_id,)) photo = cursor.fetchone()[0] # write blob data into a file write_file(photo, filename) except Error as e: print(e) finally: cursor.close() conn.close()
read_blob()函数从authors表中读取BLOB数据并将其写入filename参数指定的文件中。
代码很简单:
首先,编写一个SELECT语句以检索特定作者的照片。
其次,通过调用read_db_config()函数获得数据库配置。
第三,连接到数据库,实例化游标,然后执行查询。
接收到BLOB数据后,我们将使用write_file()函数将其写入filename指定的文件中。最后,关闭游标和数据库连接。
以下代码测试了read_blob()函数:
def main(): read_blob(144,"output\garth_stein.jpg") if __name__ == '__main__': main()
如果在项目中打开输出文件夹并在其中看到图片,则意味着您已成功从数据库中读取BLOB。
在本教程中,我们向您展示了如何使用MySQL Connector / API从Python更新和读取MySQL中的BLOB数据。