python 连接数据库进行文件查重(SAP版本)
因为我的项目是SAP的 所以这边连接DB用的是hdbcli
需求:要检查 SAP HANA 数据库的表 PANA_IMAGE_TABLE
中是否已经存在即将上传的文件的 MD5哈希值,使用的 hdbcli.dbapi
进行查询操作。
目录
前提
检查 MD5 哈希值是否存在
解释
前提
- 已经建立了与 SAP HANA 数据库的连接。
- 表
PANA_IMAGE_TABLE
中有字段(列)用来存储 MD5 值,叫做md5_hash
。
检查 MD5 哈希值是否存在
假设我们的 MD5 值已经存储在变量 file_md5
中。
from hdbcli import dbapidef check_md5_exists(connection: dbapi.Connection, file_md5: str) -> bool:query = "SELECT COUNT(*) FROM PANA_IMAGE_TABLE WHERE md5_hash = ?"try:cursor = connection.cursor()cursor.execute(query, (file_md5,))result = cursor.fetchone()cursor.close()# 如果结果大于0,说明该 MD5 值已存在return result[0] > 0except dbapi.Error as err:print(f"Error checking MD5 hash: {err}")return False# 假设你已经获得了数据库连接
connection = dbapi.connect(address="your_hana_address",port="your_hana_port",user="your_username",password="your_password"
)file_md5 = "your_generated_md5_hash" # MD5值变量if check_md5_exists(connection, file_md5):print("MD5 hash already exists in the table.")
else:print("MD5 hash does not exist in the table.")connection.close()
解释
-
连接对象:作为输入参数传入
check_md5_exists
函数,确保继续使用现有连接。 -
参数化查询:使用
?
占位符来避免 SQL 注入攻击,将file_md5
作为实际查询参数进行替换。 -
查询执行:通过创建游标并执行查询来检查表中是否已经存在该 MD5 值。
-
返回结果:通过
fetchone()
获取结果。如果计数大于 0,表示存在。 -
错误处理:加入基本的错误捕获,以处理查询过程中可能发生的异常,如连接失败或查询执行错误。
该代码示例提供了一种安全、简单且有效的方法来检查 SAP HANA 数据库中是否已存在某个文件的 MD5哈希值。通过参数化查询,安全性得到了提升。确保在执行任何数据库操作后关闭游标和连接以防资源泄露。
重点是这个sql查询语句哈 有空写个详细的 目前就是写一点往我得博客上搬运一点(●'◡'●):
SELECT COUNT(*) FROM PANA_IMAGE_TABLE WHERE md5_hash = ?