chuangliangProject/chuangliangTool/get_material.py

49 lines
2.0 KiB
Python
Raw Permalink Normal View History

2025-11-11 03:13:44 +00:00
from typing import Optional, Union
from chuangliangTool.db_base import Material1_db, Material2_db, Material3_db, Material4_db
def get_material(material_param: Optional[Union[int, str]] = None) -> Optional[str]:
"""
获取素材
参数:
material_param: 可以是 material_id(int), material_name(str) file_md5(str)
返回:
素材
"""
if material_param is None:
raise ValueError("必须提供 material_id, material_name 或 file_md5 参数")
# 根据参数类型构建查询条件
if isinstance(material_param, int):
# 如果是整数认为是material_id
sql_template = f"SELECT * FROM chuangliang_ad_material.material WHERE material_id = '{material_param}'"
else:
# 如果是字符串需要判断是material_name还是file_md5
# 这里假设file_md5是32位的MD5值material_name不是32位
if len(material_param) == 32 and all(c in '0123456789abcdefABCDEF' for c in material_param):
# 如果是32位且只包含十六进制字符认为是file_md5
sql_template = f"SELECT * FROM chuangliang_ad_material.material WHERE file_md5 = '{material_param}'"
else:
# 否则认为是material_name
sql_template = f"SELECT * FROM chuangliang_ad_material.material WHERE material_name = '{material_param}'"
material_dbs = [Material1_db, Material2_db, Material3_db, Material4_db]
db_names = ["Material1_db", "Material2_db", "Material3_db", "Material4_db"]
for db, db_name in zip(material_dbs, db_names):
try:
result = db.query_database_select_to_dataframe(sql_template)
if result is not None and len(result) > 0:
# 返回整个DataFrame让调用者处理
return result
except Exception as e:
print(f"查询{db_name}出错: {e}")
return None
if __name__ == '__main__':
# 测试不同的参数类型
material_data = get_material("豪品素材-城市生活情感街拍短视频 (86)")
print("查询结果:", material_data)