通过包含符号的Python运行SQL命令

时间:2019-01-08 13:23:29

标签: python sql

我正在尝试在Python中运行以下代码,以检查SQL的各个列中是否包含@符号:

out = pd.read_sql_query('select count(*) from [A].[' + str(Table1) + '] where [' + str(Column1) + '] not like '%@%'', cnxn)

该脚本具有一个循环,该循环在每次运行时都会更改Table1和Column1。但是“不喜欢'%@%”部分引起了问题。我该如何纠正?

运行它时出现错误

  

SyntaxError:语法无效

2 个答案:

答案 0 :(得分:1)

使用参数化避免在SQL中使用引号转义或使用括号的经典示例。使用 params 参数在熊猫的read_sql中支持参数化。并且由于需要动态表和列标识符,因此对这些项目使用str.format,因为只能对文字值进行参数化,而在LIKE子句中使用parameterziation。

以下假设您的DB-API(例如sqlite3pyodbc)使用qmark ?占位符。否则,例如pymysqlpsycopg2等,请使用%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))