我刚刚意识到允许在一次调用中psycopg2
进行多个查询。execute
例如,此代码实际上将在 中插入两行my_table
:
>>> import psycopg2
>>> connection = psycopg2.connection(database='testing')
>>> cursor = connection.cursor()
>>> sql = ('INSERT INTO my_table VALUES (1, 2);'
... 'INSERT INTO my_table VALUES (3, 4)')
>>> cursor.execute(sql)
>>> connection.commit()
是否psycopg2
有某种方法可以禁用此功能?还是有其他方法可以防止这种情况发生?
到目前为止,我所做的是搜索查询上是否有任何分号 ( ;
):
if ';' in sql:
# Multiple queries not allowed!
但是这个解决方案并不完美,因为它不允许一些有效的查询,例如:
SELECT * FROM my_table WHERE name LIKE '%;'
编辑: SQL 注入攻击在这里不是问题。我确实想授予用户对数据库的完全访问权限(如果他愿意,他甚至可以删除整个数据库)。