我如何可靠地在SQLite中检查特定的用户表是否存在?
我并不是要求使用不可靠的方法,比如检查表上的“select *”是否返回错误(这是一个好主意吗?)
原因如下:
在我的程序中,我需要创建并填充一些表,如果它们还不存在的话。
如果它们已经存在,我需要更新一些表。
我是否应该采取其他路径来表示已经创建了相关的表-例如,通过在磁盘上的程序初始化/设置文件中创建/放置/设置某个标志?
或者我的方法有意义吗?
我如何可靠地在SQLite中检查特定的用户表是否存在?
我并不是要求使用不可靠的方法,比如检查表上的“select *”是否返回错误(这是一个好主意吗?)
原因如下:
在我的程序中,我需要创建并填充一些表,如果它们还不存在的话。
如果它们已经存在,我需要更新一些表。
我是否应该采取其他路径来表示已经创建了相关的表-例如,通过在磁盘上的程序初始化/设置文件中创建/放置/设置某个标志?
或者我的方法有意义吗?
当前回答
如果你使用SQLite 3.3+版本,你可以很容易地创建一个表:
create table if not exists TableName (col1 typ1, ..., colN typN)
以同样的方式,你可以删除一个表,如果它存在,使用:
drop table if exists TableName
其他回答
参见(7)如何在SQLite FAQ中列出SQLite数据库中包含的所有表/索引:
SELECT name FROM sqlite_master
WHERE type='table'
ORDER BY name;
R DBI包中的函数dbExistsTable()为R程序员简化了这个问题。请看下面的例子:
library(DBI)
con <- dbConnect(RSQLite::SQLite(), ":memory:")
# let us check if table iris exists in the database
dbExistsTable(con, "iris")
### returns FALSE
# now let us create the table iris below,
dbCreateTable(con, "iris", iris)
# Again let us check if the table iris exists in the database,
dbExistsTable(con, "iris")
### returns TRUE
如果你用python文件运行它并且使用sqlite3。打开命令提示符或bash任何您正在使用的使用
首先在Python3 file_name.py中编写SQL代码。 然后执行sqlite3 file_name.db。 如果存在表,此命令将给出表。
Use
SELECT 1 FROM table LIMIT 1;
防止所有记录被读取。
class CPhoenixDatabase():
def __init__(self, dbname):
self.dbname = dbname
self.conn = sqlite3.connect(dbname)
def is_table(self, table_name):
""" This method seems to be working now"""
query = "SELECT name from sqlite_master WHERE type='table' AND name='{" + table_name + "}';"
cursor = self.conn.execute(query)
result = cursor.fetchone()
if result == None:
return False
else:
return True
注意:现在在我的Mac上使用Python 3.7.1