如何用Python和MySQLdb创建动态SQL语句
我有以下代码:
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()这个函数,让它在有'limit'的情况下和没有'limit'的情况下都能正常工作,而不需要写两个查询呢?
1 个回答
0
首先,不要这样做。
不要随便生成SQL语句。这会带来安全隐患,可能会引发比解决的问题更多的麻烦。
其次,去看看MySQL关于LIMIT
的页面。他们建议使用一个很大的数字。
SELECT * FROM tbl LIMIT 18446744073709551615;
把你的默认值从0改成18446744073709551615。
如果你不喜欢这样做,那就用if
语句,写两个版本的SELECT语句。长远来看,拥有两个相似的SELECT语句而没有安全漏洞会更好。
第三,不要这样测试。
使用unittest
。http://docs.python.org/library/unittest.html