CREATE TABLE IF NOT EXISTS是否创建了表格?

时间:2015-08-24 21:14:56

标签: python python-2.7 sqlite

import sqlite3
connection = sqlite3.connect("...")
cursor = connection.cursor()
cursor.execute("CREATE TABLE IF NOT EXISTS ...")

我是如何找到执行CREATE TABLE IF NOT EXISTS,表格是否已创建或已经存在?

2 个答案:

答案 0 :(得分:0)

编辑:更新回答 听起来你事先并不知道哪些表可能存在,这些表中有哪些表(如果有的话),或者有办法事先检查表是否存在。

要在CREATE TABLE命令中使用IF NOT EXISTS子句后检查表是否已创建,您可以尝试以下方法之一:

  1. 使“new”表至少具有一个保证与旧表不同的列名。在CREATE TABLE命令之后,选择保证为新的列。

    CREATE TABLE newTable IF NOT EXISTS (column1 INTEGER, somethingUnique INTEGER) SELECT somethingUnique FROM newTable

    如果您在选择somethingUnique时没有收到错误,则表示您已创建新表,否则该表已存在。如果您最终创建新表并且不再需要somethingUnique列,则可以删除该列。

  2. 即使您不想制作somethingUnique列,也有可能如果旧表存在,则其中至少有一行。您所要做的就是从表格中选择任何内容。如果没有返回,那么你可能会或可能不会处理你的新表(所以回到建议1)。如果确实有东西被退回,那么你知道你正在处理一张旧桌子。

  3. 旧答案

    查看表是否已创建(或存在)的一种方法是进入终端,导航到数据库所在的目录,然后使用sqlite命令。

    $ sqlite3
    sqlite> .open yourDatabase.db
    sqlite> SELECT * FROM theTableYouWantedToCreate;
    

    如果该表不存在,您将收到以下错误:

    Error: no such table: theTableYouWantedToCreate
    

    如果表确实存在,显然它会返回表中的所有内容。如果表中没有任何内容(因为您刚创建它),sqlite将返回另一个提示,表明该表确实存在。

答案 1 :(得分:0)

唯一需要检查的方法是删除查询的IF NOT EXISTS部分并检查sqlite3.OperationalError,其中包含"table $tablename already exists"格式的消息。我不相信错误信息是稳定的,但Python显然不提供错误代码和异常。

最安全的做法是开始一个事务和query the sqlite_master table beforehand,如果没有结果则创建表,然后提交事务。

请注意,如果您尝试创建的表具有与数据库中存在的模式不同的模式,则这些解决方案都不会正常工作;数据库迁移更复杂,通常需要逐个处理。