我有以下代码:
def sql_exec(self, sql_stmt, args = tuple()):
"""
Executes an SQL statement and returns a cursor.
An SQL exception might be raised on error
@return: SQL cursor object
"""
cursor = self.conn.cursor()
if self.__debug_sql:
try:
print "sql_exec: " % (sql_stmt % args)
except:
print "sql_exec: " % sql_stmt
cursor.execute(sql_stmt, args)
return cursor
def test(self, limit = 0):
result = sql_exec("""
SELECT
*
FROM
table
""" + ("LIMIT %s" if limit else ""), (limit, ))
while True:
row = result.fetchone()
if not row:
break
print row
result.close()
我怎样才能很好地编写 test() 使其在有或没有“限制”的情况下都可以工作,而不必编写两个查询?
最佳答案
首先,不要。
不要“即时”构建 SQL。这是一场安全噩梦。它会导致比看起来要解决的问题更多的问题。
其次,阅读 LIMIT
上的 MySQL 页面。他们建议使用大量的数字。
SELECT * FROM tbl LIMIT 18446744073709551615;
将默认值从 0 更改为 18446744073709551615。
如果您不喜欢那样,则使用 if
语句并编写两个版本的 SELECT。从长远来看,最好有两个没有安全漏洞的相似 SELECT 语句。
第三,不要这样测试。
关于python - 如何使用 python 和 mysqldb 创建动态 sql 语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3351897/