如何用Python和MySQLdb创建动态SQL语句

1 投票
1 回答
1719 浏览
提问于 2025-04-16 01:57

我有以下代码:


    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语句而没有安全漏洞会更好。

第三,不要这样测试。

使用unittesthttp://docs.python.org/library/unittest.html

撰写回答