如何检查Python中是否存在表?

tad*_*123 2 python sql exists

我目前正在学习网页设计课程。我想要做的是检查portafolio我的数据库中是否存在一个名为的表,如果没有,我想创建一个。我使用 Python (flask) 和 sqlite3 来管理我的数据库。到目前为止,我使用 SQL 中的一些逻辑来创建表,如果它不存在:

# db is my database variable
db.execute('''create table if not exists portafolio(id INTEGER PRIMARY KEY AUTOINCREMENT, 
                                              stock TEXT, 
                                              shares INTEGER, 
                                              price FLOAT(2), 
                                              date TEXT
                                             ''');
Run Code Online (Sandbox Code Playgroud)

但是我不想使用 SQL 命令,而是想知道如何在 Python 中进行完全相同的检查,因为它看起来更简洁。

任何帮助,将不胜感激。

ale*_*cxe 5

不确定哪种方式更干净,但您可以发出简单的选择并处理异常:

try:
    cursor.execute("SELECT 1 FROM portafolio LIMIT 1;")
    exists = True
except sqlite3.OperationalError as e:
    message = e.args[0]
    if message.startswith("no such table"):
        print("Table 'portafolio' does not exist")
        exists = False
    else:
        raise
Run Code Online (Sandbox Code Playgroud)

请注意,这里我们必须检查OperationalError它是什么类型,并且我们必须在字符串检查中包含这个“不漂亮”的消息子字符串,因为目前无法获得实际的错误代码

或者,更具体的 SQLite 方法

table_name = "portafolio"
cursor.execute("""
    SELECT name 
    FROM sqlite_master 
    WHERE type='table' AND name=?;
""", (table_name, ))

exists = bool(cursor.fetchone())
Run Code Online (Sandbox Code Playgroud)

  • nit为异常解决方案。如果原因是 *not*,则可能会引发 `OperationalError`,因为该表存在。例如,查询可能存在语法问题,但仍属于“OperationalError”。您可能需要更深入地研究更具体的异常,才能准确地找出*原因*。 (2认同)