当前位置: 首页 > 面试题库 >

如何测试表是否已经存在?

郎琪
2023-03-14
问题内容

我正在做一个拼字游戏程序

在下面的示例中,我下面的代码使用SQLite作为简单数据库来存储我的单词。

但是,它告诉我无法重新创建数据库表。

如何检查是否已经存在一个名为的表spwords,然后跳过尝试创建表的操作?

错误:

(<class 'sqlite3.OperationalError'>, OperationalError('table spwords already exists',), None)

编码:

def load_db(data_list):

# create database/connection string/table
conn = sqlite.connect("sowpods.db")

#cursor = conn.cursor()
# create a table
tb_create = """CREATE TABLE spwords
                (sp_word text, word_len int, word_alpha text, word_score int)
                """
conn.execute(tb_create)  # <- error happens here
conn.commit()

# Fill the table
conn.executemany("insert into spwords(sp_word, word_len, word_alpha, word_score) values (?,?,?,?)",  data_list)
conn.commit()

# Print the table contents
for row in conn.execute("select sp_word, word_len, word_alpha, word_score from spwords"):
    print (row)

if conn:
    conn.close()

问题答案:

您要查找的查询是:

SELECT name FROM sqlite_master WHERE type='table' AND name='spwords'

因此,代码应如下所示:

tb_exists = "SELECT name FROM sqlite_master WHERE type='table' AND name='spwords'"
if not conn.execute(tb_exists).fetchone():
    conn.execute(tb_create)

SQLite 3.3+的一个方便的替代方法是使用更智能的查询来创建表:

CREATE TABLE IF NOT EXISTS spwords (sp_word text, word_len int, word_alpha text, word_score int)

从文档中:

试图在已经包含相同名称的表,索引或视图的数据库中创建新表通常是错误的。但是,如果将“ IF NOT EXISTS”子句指定为CREATE
TABLE语句的一部分,并且已经存在相同名称的表或视图,则CREATE
TABLE命令将完全无效(并且不会返回错误消息)。如果由于存在索引而无法创建表,即使指定了“ IF NOT EXISTS”子句,仍然会返回错误。



 类似资料:
  • 问题内容: 我有一个使用方法实现自定义的库,该方法将在调用时触发事件。我想测试该行为的方法。 我的自定义控件: 和测试: 问题在于该方法永远不会被调用,因此无法实现。 问题是:在这种情况下,我们如何进行测试?也许我们需要以某种方式强制运行循环? 编辑1:请注意,由于我正在测试库,因此我的测试目标没有任何主机应用程序。当测试目标具有主机应用程序时,以上测试通过。 问题答案: Apple的UICont

  • 本文向大家介绍如何测试JavaScript cookie是否已过期?,包括了如何测试JavaScript cookie是否已过期?的使用技巧和注意事项,需要的朋友参考一下 要测试Cookie是否在JavaScript中过期,请添加以下条件并检查- 您还可以使用单行代码进行检查-

  • 本文向大家介绍如何检测MySQL中是否存在表?,包括了如何检测MySQL中是否存在表?的使用技巧和注意事项,需要的朋友参考一下 要检测表的存在,请使用INFORMATION_SCHEMA.TABLES的概念。以下是语法- 要了解上述语法,让我们创建一个表- 这是检测数据库中是否存在表的查询- 这将产生以下输出-

  • 我是Spring的新人&尝试通过创建小项目来增强我的技能。在我的新应用程序中,我想对accountNumber进行唯一性检查,不幸的是我没有成功。我想应用isPresent()方法,但当我调用它时,它并不存在。如果我得到帮助,我会很感激。 AccountrePository

  • 我已经将Selenium WebDriver添加到Powershell并创建WebDriver实例: 现在我要找到输入字段: 我发现了几个如何在C#中“测试元素是否存在”的例子: Selenium WebDriver-测试元素是否存在

  • 我想单击单击时下载文件的按钮,并测试是否已下载预期的文件。 我已经用谷歌搜索过这个,但不幸的是没有找到关于这个主题的任何具体答案,我找到的很多帖子都已经过时了(2014 年),我敢打赌 Selenium 现在一定已经改变了 API 定义。