Найти - Пользователи
Полная версия: Чтение из незнакомого файла БД SQLite3
Начало » Python для новичков » Чтение из незнакомого файла БД SQLite3
1
Schlange
Скажите пожалуйста, как просто прочитать весь файл, когда неизвестны названия и количество его таблиц?

Конструкции типа
 print(conn.execute("SELECT * FROM *").fetchall())

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

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

Базы данных хранят информацию о таблицах в специальных таблицах, имена которых разные для разных СУБД
vic57
Schlange
 select sql from sqlite_master
https://www.sqlite.org/faq.html
DamMercul
 SELECT * FROM sqlite_master
Этот запрос даст тебе инфу по всем таблицам, индексам и т.д., а далее просто делаешь:
 for table in tables:
    print(conn.execute('SELECT * FROM ' + table).fetchall())
Schlange
Спасибо за ответы! Буду пробовать.

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
rami
Пробуйте так:
 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() база закроется без применения изменений!
Schlange
Спасибо! Это сработало. Выходит вариант DamMercul был неверный. tables дополнительно создавать - лишняя сущность и проблемы, которые я словил.
DamMercul
Schlange
Спасибо! Это сработало. Выходит вариант DamMercul был неверный. tables дополнительно создавать - лишняя сущность и проблемы, которые я словил.
Лемао, с чего это так?
tables - это как раз и есть cursor.fetchall(), только
 [a[2] for a in cursor.fetchall()]
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB