Python调用MySQL查询映射表获取my_id的SQL语法问题
正确的参数化查询实现方案
先修正你之前的核心问题:
- WHERE子句多写了重复条件且语法错误,只需匹配
external_id列即可 cursor.execute()返回的不是查询结果,是执行状态,必须用fetchone()/fetchall()获取数据- 参数绑定要和数据库驱动规则匹配,且变量名要和传入参数一致
针对MySQL的实现(用%s占位符)
如果用mysql-connector-python或MySQLdb驱动,写法如下:
def get_my_id(external_system_id): # 注意:cursor需是已连接数据库的有效游标 cursor.execute("SELECT my_id FROM 你的映射表名 WHERE external_id = %s", (external_system_id,)) match_row = cursor.fetchone() # 有匹配则返回my_id,无匹配返回None return match_row[0] if match_row else None
通用命名参数写法(适配更多数据库)
如果想用可读性更高的命名参数(支持SQLite、PostgreSQL等):
def get_my_id(external_system_id): cursor.execute("SELECT my_id FROM 你的映射表名 WHERE external_id = :ext_id", {"ext_id": external_system_id}) match_row = cursor.fetchone() return match_row[0] if match_row else None
重要提醒:
- 把代码里的
你的映射表名替换成实际表名 - 确保游标
cursor已经完成数据库连接初始化 - 因为
external_id是唯一映射,用fetchone()取第一行即可,无匹配时返回None,避免索引报错 - 绝对不要直接拼接SQL字符串(比如
f"SELECT ... WHERE external_id={external_system_id}"),会引发SQL注入风险
内容的提问来源于stack exchange,提问作者user19441790
相关产品推荐
相关产品推荐

