我正在尝试在Python中运行以下代码,以检查SQL的各个列中是否包含@符号:
out = pd.read_sql_query('select count(*) from [A].[' + str(Table1) + '] where [' + str(Column1) + '] not like '%@%'', cnxn)
该脚本具有一个循环,该循环在每次运行时都会更改Table1和Column1。但是“不喜欢'%@%”部分引起了问题。我该如何纠正?
运行它时出现错误
SyntaxError:语法无效
答案 0 :(得分:1)
使用参数化避免在SQL中使用引号转义或使用括号的经典示例。使用 params 参数在熊猫的read_sql
中支持参数化。并且由于需要动态表和列标识符,因此对这些项目使用str.format
,因为只能对文字值进行参数化,而在LIKE
子句中使用parameterziation。
以下假设您的DB-API(例如sqlite3
或pyodbc
)使用qmark ?
占位符。否则,例如pymysql
,psycopg2
等,请使用%s
或命名参数:
query = '''select count(*)
from [A].[{tbl}]
where [{col}] not like ?
'''
# NOTE USE OF ONE-ITEM TUPLE
out = pd.read_sql(query.format(tbl=str(Table1), col=str(Column1)), cnxn, params=('%@%',))
答案 1 :(得分:0)
这不是构建read_sql_query方法的标准方法,您可以尝试执行以下操作:
query = 'select count(*) from ? where ? not like ?'
out = pd.read_sql_query(query, cnxn, params=(table_name, column_name, expression))