test.db
ファイルに700個のテーブルがあり、の場合にはこれらのテーブルをループしてテーブル名を返すのはどうですか?Pythonのsqliteループはデータベース内のすべてのテーブルを考えた
connection.execute('SELECT * FROM "all_tables" WHERE "columnA" = "-"')
どのようにして700テーブルをすべてall_tables
に入れるのですか?
test.db
ファイルに700個のテーブルがあり、の場合にはこれらのテーブルをループしてテーブル名を返すのはどうですか?Pythonのsqliteループはデータベース内のすべてのテーブルを考えた
connection.execute('SELECT * FROM "all_tables" WHERE "columnA" = "-"')
どのようにして700テーブルをすべてall_tables
に入れるのですか?
あなたはsqlite_masterは、データベース内のすべてのテーブル名を取得するために照会することができます:SELECT name FROM sqlite_master WHERE type = 'table'
sqlite_master
があなたデータベース(メタデータ)についての情報を含むテーブルと考えることができます。
速いが、最も可能性の高い非効率的な方法(それは700の別の結果セットで700個のクエリを実行していることになるので)、テーブル名のリストを取得し、これらのテーブルをループし、どこcolumnA = "-"
データを返す:
for row in connection.execute('SELECT name FROM sqlite_master WHERE type = "table" ORDER BY name').fetchall()
for result in connection.execute('SELECT * FROM ' + row[1] + ' WHERE "columnA" = "-"').fetchall()
# do something with results
注意:上のコードはテストされていませんが、これにアプローチする方法についてのアイデアがあります。
SQLiteの
は、すべてのテーブル名を取得:テーマに続行するには
SELECT name FROM sqlite_master WHERE type='table' ORDER BY name;
サイクル
for table in tables:
...
connection.execute('SELECT * FROM "table1" WHERE "columnA" = "-"')
または1つのSQL要求UNION
sql = []
for table in tables
sql.append('(SELECT * FROM "' + table + '" WHERE "columnA" = "-";)')
' UNION '.join(sql)
を:
をimport sqlite3
try:
conn = sqlite3.connect('/home/rolf/my.db')
except sqlite3.Error as e:
print('Db Not found', str(e))
db_list = []
mycursor = conn.cursor()
for db_name in mycursor.execute("SELECT name FROM sqlite_master WHERE type = 'table'"):
db_list.append(db_name)
for x in db_list:
print "Searching",x[0]
try:
mycursor.execute('SELECT * FROM '+x[0]+' WHERE columnA" = "-"')
stats = mycursor.fetchall()
for stat in stats:
print stat, "found in ", x
except sqlite3.Error as e:
continue
conn.close()