1

我在 sqlite3 中遇到参数问题。问题来了又去,所以一定有我遗漏的东西。我尝试将我的代码简化为最基本的形式,但仍然不明白我做错了什么。我可以使用字符串替换形式让这段代码工作,sql = 'SELECT {} FROM {}'.format(col, tbl)但我知道这不安全。

这是一个示例代码:

def check_exists(self, col, tbl):
        self.cursor.execute("SELECT ? from ?" , (col, tbl))
        if self.cursor.fetchall():
            return True
        return False

我这样运行:

check_exists('type', 'tbl_types')

这引发了这样的异常:

self.cursor.execute("SELECT ? from ?" , (col, tbl))
OperationalError: near "?": syntax error

我的代码可以使用显式参数正常工作:

def check_exists(self):
        self.cursor.execute('SELECT * from tbl_types')
        if self.cursor.fetchall():
            return True
        return False

>>> t.check_exists()
True
4

0 回答 0