2013-08-02 68 views
1

我想列出一個sqlite3的數據庫中的所有表,但它不工作的表。讓我們想象一下,在MA數據庫中,我有如下表:foo1,foo2的,foo3 ... 然後,使用此代碼:列表數據庫

cur.execute("SELECT name FROM sqlite_master") 
for table in cur: 
    print("The table is", table[0]) 

我有這樣的輸出:The table is foo1,而我想有這樣的一個:

The table is foo1 
The table is foo2 
The table is foo3 
… 

但是如果我修改的代碼有:

cur.execute("SELECT name FROM sqlite_master") 
print(cur.fetchone()) 
for table in cur: 
    print("The table is", table[0] 

然後輸出爲:

(foo1,) 
The table is foo2 

那麼,什麼是錯在我的代碼?

+0

我不這麼認爲。我已經使用您提供的鏈接來創建我的代碼,但它不起作用。 –

+0

也許按名稱排序? 'SELECT名FTOM SQLITE_MASTER ORDER BY name' – rednaw

+1

這通常是一個壞主意第三方編輯語法錯誤出一個問題,因爲他們往往提供線索,什麼是壞了,所以我滾回來。 @ Shan-x如果'FTOM'實際上不在你的代碼中,我建議你編輯這個問題。如果這些是拼寫錯誤,我建議你複製並粘貼你的代碼,而不是重新輸入。 – msw

回答

2

你的第一個方法應該有工作(假設FTOMFROM):

import sqlite3 
connection = sqlite3.connect(':memory:') 
cur = connection.cursor() 
cur.execute('CREATE TABLE foo1 (bar INTEGER, baz TIMESTAMP)') 
cur.execute('CREATE TABLE foo2 (bar INTEGER, baz TIMESTAMP)') 
cur.execute('CREATE TABLE foo3 (bar INTEGER, baz TIMESTAMP)') 
cur.execute(
    "SELECT name FROM sqlite_master") 
for table in cur: 
    print(table[0]) 

打印

foo1 
foo2 
foo3 

注意,排除指數,一定要加WHERE type='table'到SQL查詢。

+0

是的,但我不能'cur.execute('CREATE TABLE foo1(bar INTEGER,baz TIMESTAMP)')'因爲我不知道表名。實際上,我不想'print(table [0])',而是這樣做:'cur.execute('CREATE TABLE {}(bar INTEGER,baz TIMESTAMP)'.format(table [0])無論如何,這並不是因爲它應該的,我不知道爲什麼。 –