Python SQLite3如何只提取特定的表

Python SQLite3 How to extract specific tables only

我有一个 sqlite 数据库,我想从中提取特定的 table。 该数据库有数千个 table 个名字。 我只对以 "contact_" 开头的 table 感兴趣 但是有很多是 contactOLD,contact#### 随便你说。

然后我需要从每个 "contact_########" table 中提取行数据并创建一个 CSV 或电子表格类型的文档。总共有大约 1600 个具有唯一名称。

我最初认为我可以使用 sqlite 查询来做到这一点,但不能。 然后我尝试编写一个小脚本来执行此操作,但我无法弄清楚如何为 cursor.execute 设置条件以仅从我感兴趣的 table 中获取数据。

有什么想法吗?

更新**

import sqlite3

fname = raw_input("Enter your filename: ")
con = sqlite3.connect(fname)
cursor = con.cursor()
cursor.execute("SELECT name FROM sqlite_master WHERE type='table'")
mydata = cursor.fetchall()
for lines in mydata:
    print lines

我已经能够列出 table。我仍然需要为 "contact_" 添加一个条件到我的 WHERE 当我添加它时,我只得到 [] 我的印刷品。我想我在这里搞砸了。

****更新 2*** 感谢下面的@Olver W.,他让我走上了正确的轨道。

fname = raw_input("Enter your filename: ")
con = sqlite3.connect(fname)
cursor = con.cursor()
for tablename in cursor.execute("SELECT name FROM sqlite_master WHERE type='table';"):
    if tablename[0].startswith('Contacts_'):
        tablename = str(tablename[0])
        query = "Select * FROM " + tablename
        query = str(query)
        data = cursor.execute(query)
        for items in data:
            print items

在某些情况下,我会将其输出到电子表格或另一个 SQLite 数据库,但在我的测试数据库中,它会选择适当的条件并正确输出行。我可以而且会压缩它一点,让它更干净,但它确实有效。谢谢

如评论中所述,您可以先查询所有 table 名称,然后遍历它们并检查是否满足名称条件,这可以在 Python 中完成:

for tablename in cur.execute('SELECT name FROM sqlite_master WHERE type="table";'):
    if tablename[0].startswith('conn_'):
        execute_some_query_using_this_table()