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

通过包含符号的Python运行SQL命令,python,sql,Python,Sql,我尝试在Python中运行以下代码,以检查SQL中的各个列是否包含@符号: out = pd.read_sql_query('select count(*) from [A].[' + str(Table1) + '] where [' + str(Column1) + '] not like '%@%'', cnxn) 脚本有一个循环,每次运行时都会更改Table1和Column1。但与“%@%不同的部分正在引发问题。我如何纠正这个问题 当我运行它时,我得到了错误 SyntaxError:无

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

out = pd.read_sql_query('select count(*) from [A].[' + str(Table1) + '] where [' + str(Column1) + '] not like '%@%'', cnxn)
脚本有一个循环,每次运行时都会更改Table1和Column1。但与“%@%不同的部分正在引发问题。我如何纠正这个问题

当我运行它时,我得到了错误

SyntaxError:无效语法


这不是构建read\u sql\u查询方法的标准方法,您可以尝试以下方法:

query = 'select count(*) from ? where ? not like ?'
out = pd.read_sql_query(query, cnxn, params=(table_name, column_name, expression))

使用参数化避免SQL中的引号转义或附件的经典示例。pandas的using params参数中支持参数化。因为您需要动态表和列标识符,所以对这些项使用str.format,因为只有文本值可以参数化,但在LIKE子句中使用参数化

下面假设您的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=('%@%',))   

尝试转义“%@附近”相关的错误::sql“select count*from”上的执行失败?哪里你能提供完整的代码片段吗?这将帮助我更好地理解这个问题。query='select count*from?哪里不像“out=pd.read\u sql\u queryquery,cnxn,params=strdfb1,strdfb2,str%@%”让我们假设,表名是“user\u table”,列名是“email”。所以代码应该是table\u name='user\u table'column\u name='email'expression='\'%@%\out=pd.read\u sql\u queryquery,cnxn,params=table\u name,column\u name,expression试试这个,告诉我结果