首页 > 解决方案 > 如何检查表是否存在变量

问题描述

我有一个 sqlite 数据库,它使用以下内容可以成功检查表是否存在。

conn = sqlite3.connect('test.db)
c = conn.cursor()

c.execute('''SELECT count(name) FROM sqlite_master WHERE type='table' AND name = 'March' '''

但是,只要我在此代码中引入一个变量:

c.execute('''SELECT count(name) FROM sqlite_master WHERE type='table' AND name={} '''.format('March')

我收到以下错误:

c.execute('''SELECT count(name) FROM sqlite_master WHERE type='table' AND name={}'''.format('March'))
sqlite3.OperationalError: no such column: March

有没有更好的方法来做到这一点,或者我错过了什么?

标签: pythonsqlite

解决方案


您仍然需要引用列名,因为您正在动态构建查询。

c.execute(
    '''SELECT count(name)
       FROM sqlite_master
       WHERE type='table' AND name='{}'
    '''.format('March')
)

但是,编写此类查询的安全的方法是让c.execute自己插入值,而不是使用字符串插值(这不能确保值被正确转义)。

c.execute(
    '''SELECT count(name)
       FROM sqlite_master
       WHERE type='table' AND name=?
    ''',
    ("March",)
)

推荐阅读