2015-04-16 2 views
-1

У меня есть база данных sqlite, из которой я хочу извлечь определенные таблицы. База данных содержит тысячи имен таблиц. Меня интересуют только таблицы, которые начинаются с «contact_» Однако есть много контактных контактов, обращайтесь к ####, вы его называете.Python SQLite3 Как извлечь только определенные таблицы

Затем мне нужно извлечь данные из каждой таблицы «contact_ ########» и создать документ типа CSV или таблицы. Всего 1600 экземпляров с уникальными именами.

Я изначально думал, что могу сделать это с помощью SQL-запроса, но не смог. Затем я попытался написать небольшой скрипт, чтобы сделать это, но я не мог понять, как настроить условные выражения для cursor.execute, чтобы извлекать данные только из интересующих меня таблиц.

Любые идеи?

Update **

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 

Я был в состоянии получить таблицы в список. Мне все еще нужно добавить условие к моему ГДЕ для «contact_». Когда я его добавлю, я получаю только [] в моей печати. Я думаю, что я что-то путаю здесь.

**** Обновление 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 базы данных, но в моей тестовой базе данных она выбирает соответствующие критерии и вывода строк правильно. Я могу и буду конденсировать его немного, чтобы сделать его чище, но это делает трюк. Благодаря

+0

Вы могли бы сначала получить список всех таблиц, присутствующих в базе данных, из которых извлекается список, содержащий таблицы, которые начинаются с 'contact', а затем строят отдельные запросы, итерируя этот список имен таблиц. – Bhargav

+0

Если я добавлю условие «контакт», я ничего не получаю. Я думаю, мне нужно добавить подстановочный знак или что-то еще. Добавлено обновление выше – BillSam

ответ

0

Как уже упоминалось в комментариях, вы можете первым запросить все имена таблиц, а затем пройти через них и проверить, если условие имя выполнено, которое может быть сделано в 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() 
+0

Спасибо, это намного лучше. Но как я могу ссылаться на таблицу на каждой итерации. Стандарт Select * с итерации не работает. Я попытался использовать data = cursor.fetchall() для строк в данных: распечатать данные, но, похоже, ничего не печатает. спасибо – BillSam

+0

@BillSam, я не понимаю. Вы пытались заменить 'execute_some_query_using_this_table' на' cur.execute ('SELECT * from?', Tablename [0]) '? –

+0

Я пробовал это сначала (я думаю) и получил синтаксическую ошибку для SQL-запроса. Я думаю, это было потому, что итерация была кортежем. Поэтому я закончил преобразовывать его в строку в новую переменную, а затем вызывал переменную как cursor.execute. Я все еще выясняю этот сайт, поэтому я не уверен, как прикрепить код здесь, поэтому я отредактирую оригинал и добавлю то, что в конечном итоге работало над моей тестовой базой данных (что было значительно меньше) благодаря @Oliver – BillSam

Смежные вопросы