Уведомления

Группа в Telegram: @pythonsu

#1 Авг. 12, 2018 07:49:53

Schlange
Зарегистрирован: 2016-11-28
Сообщения: 38
Репутация: +  1  -
Профиль   Отправить e-mail  

Чтение из незнакомого файла БД SQLite3

Скажите пожалуйста, как просто прочитать весь файл, когда неизвестны названия и количество его таблиц?

Конструкции типа

 print(conn.execute("SELECT * FROM *").fetchall())

вызывают ошибку, в документации не нашёл. Все примеры работают с теми таблицами, которые сами и создали.



ubuntu 14.04 / manjaro 16.10

Офлайн

#2 Авг. 12, 2018 10:04:55

doza_and
От:
Зарегистрирован: 2010-08-15
Сообщения: 4138
Репутация: +  252  -
Профиль   Отправить e-mail  

Чтение из незнакомого файла БД SQLite3

Schlange
SELECT * FROM *
Зачет! Мне всегда SQL казался убогим.
Первая же ссылка
https://stackoverflow.com/questions/82875/how-to-list-the-tables-in-an-sqlite-database-file-that-was-opened-with-attach

Базы данных хранят информацию о таблицах в специальных таблицах, имена которых разные для разных СУБД



Офлайн

#3 Авг. 12, 2018 12:41:24

vic57
Зарегистрирован: 2015-07-07
Сообщения: 893
Репутация: +  126  -
Профиль   Отправить e-mail  

Чтение из незнакомого файла БД SQLite3

Schlange

 select sql from sqlite_master
https://www.sqlite.org/faq.html

Офлайн

#4 Авг. 12, 2018 20:13:02

DamMercul
Зарегистрирован: 2017-11-26
Сообщения: 323
Репутация: +  13  -
Профиль   Отправить e-mail  

Чтение из незнакомого файла БД SQLite3

 SELECT * FROM sqlite_master
Этот запрос даст тебе инфу по всем таблицам, индексам и т.д., а далее просто делаешь:
 for table in tables:
    print(conn.execute('SELECT * FROM ' + table).fetchall())



____________________________________________________

 # Life loop
while alive:
    if (fun > boredom) and money:
        pass_day(fun, boredom, money)
        continue
    else: break

Офлайн

#5 Авг. 13, 2018 05:00:32

Schlange
Зарегистрирован: 2016-11-28
Сообщения: 38
Репутация: +  1  -
Профиль   Отправить e-mail  

Чтение из незнакомого файла БД SQLite3

Спасибо за ответы! Буду пробовать.

UPD: Я не знаю, как правильно вырезать непонятные sqlite квадратные ковычки:
sqlite3.OperationalError: unrecognized token: “[”

 #!/usr/bin/python3
# coding: utf-8
import sqlite3
dbname = 'places.sqlite'
conn = sqlite3.connect(dbname) # Подключение к dbname
cursor = conn.cursor() # Создание курсора. Если ниже используется
                       # .execute то можно не создавать, 
                       # сам создастся.
tables = str(conn.execute('SELECT * FROM sqlite_master').fetchall())
print(tables)
for table in tables:
    print(conn.execute('SELECT * FROM ' + table).fetchall())
conn.close()  # закрытие файла базы. Внимание, без commit() 
              # база закроется без применения изменений!


tables = str( … ) я сделал после ошибки TypeError: must be str, not tuple



ubuntu 14.04 / manjaro 16.10

Отредактировано Schlange (Авг. 13, 2018 06:37:55)

Офлайн

#6 Авг. 13, 2018 10:25:59

rami
Зарегистрирован: 2018-01-08
Сообщения: 280
Репутация: +  71  -
Профиль   Отправить e-mail  

Чтение из незнакомого файла БД SQLite3

Пробуйте так:

 import sqlite3
dbname = 'places.sqlite'
conn = sqlite3.connect(dbname) # Подключение к dbname
cursor = conn.cursor() #Создание курсора.
cursor.execute('SELECT * FROM sqlite_master')
    
for table in cursor.fetchall():
    print(table[1])
    
conn.close()  #закрытие файла базы. Внимание, без commit() база закроется без применения изменений!

Отредактировано rami (Авг. 13, 2018 11:51:17)

Офлайн

#7 Авг. 13, 2018 16:48:18

Schlange
Зарегистрирован: 2016-11-28
Сообщения: 38
Репутация: +  1  -
Профиль   Отправить e-mail  

Чтение из незнакомого файла БД SQLite3

Спасибо! Это сработало. Выходит вариант DamMercul был неверный. tables дополнительно создавать - лишняя сущность и проблемы, которые я словил.



ubuntu 14.04 / manjaro 16.10

Офлайн

#8 Авг. 14, 2018 14:39:02

DamMercul
Зарегистрирован: 2017-11-26
Сообщения: 323
Репутация: +  13  -
Профиль   Отправить e-mail  

Чтение из незнакомого файла БД SQLite3

Schlange
Спасибо! Это сработало. Выходит вариант DamMercul был неверный. tables дополнительно создавать - лишняя сущность и проблемы, которые я словил.
Лемао, с чего это так?
tables - это как раз и есть cursor.fetchall(), только
 [a[2] for a in cursor.fetchall()]



____________________________________________________

 # Life loop
while alive:
    if (fun > boredom) and money:
        pass_day(fun, boredom, money)
        continue
    else: break

Отредактировано DamMercul (Авг. 14, 2018 14:40:04)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version