在python模块中生成sql-query 数据库是PostgreSQL。
在sql-query中,与子字符串进行比较:
'''
SELECT *
FROM TableTemp
WHERE "SomeColumn" LIKE '%{0}%'
'''.format(<some_string>)
如果字符串是:
%' --
然后检查将始终返回&#34; True&#34;。
另外,这是一个进行sql-injection的机会
提示,如何正确处理搜索时考虑的字符串,但是没有崩溃请求并且有sql注入?
UPD:
问题解决了。评论中的决定
答案 0 :(得分:1)
您可以将字符串作为一个整体传递给psycopg2
作为.execute()
的第二个参数。参考:http://initd.org/psycopg/docs/usage.html#passing-parameters-to-sql-queries
import psycopg2
conn = psycopg2.connect("dbname=test user=postgres")
curs = conn.cursor()
search_term = 'some string'
search_tuple = ('%{0}%'.format(search_term,) # note that this has to be a container
curs.execute('''select
from TableTemp
where SomeColumn like %s''',search_tuple).fetchall()
演示:
>>> conn.execute('select * from t').fetchall()
[(u'10:00',), (u'8:00',)]
>>> conn.execute('select * from t where c like ?',('%8%',)).fetchall()
[(u'8:00',)]
>>> conn.execute('select * from t where c like ?',('%:%',)).fetchall()
[(u'10:00',), (u'8:00',)]