Используя SQLite в программе Python

Вы можете использовать .tobytes:

>>> from array import array
>>> arr = array('b', [-20, -107, -124, -21, -123, -107])
>>> arr.tobytes()
b'\xec\x95\x84\xeb\x85\x95'

А для str вы просто декодируете байты:

>>> arr.tobytes().decode()
'아녕'
14
задан crystalattice 17 October 2008 в 09:02
поделиться

8 ответов

AFAIK база данных SQLITE является просто файлом. Чтобы проверить, существует ли база данных, проверьте на существование файла.

при открытии базы данных SQLITE, она автоматически создаст тот, если файл, который создает резервную копию ее, не будет существовать.

, При попытке открыть файл как sqlite3 базу данных, которая НЕ является базой данных, Вы получите это:

"sqlite3. DatabaseError: файл шифруется или не является базой данных"

так проверка, чтобы видеть, существует ли файл, и также удостоверьтесь, что попытались поймать исключение в случае, если файл не является sqlite3 базой данных

13
ответ дан 1 December 2019 в 05:56
поделиться
  • Sqlite не выдает исключение при создании новой базы данных с тем же именем он просто соединится с ним. Так как sqlite является основанной на файле базой данных, я предлагаю, чтобы Вы просто проверили на существование файла.
  • О Вашей второй проблеме, чтобы проверить, была ли таблица уже составлена, просто ловят исключение. Исключение "sqlite3. OperationalError: таблица TEST уже существует", брошен, если таблица уже существует.
import sqlite3
import os
database_name = "newdb.db"
if not os.path.isfile(database_name):
    print "the database already exist"
db_connection = sqlite3.connect(database_name)
db_cursor = db_connection.cursor()
try:
    db_cursor.execute('CREATE TABLE TEST (a INTEGER);')
except sqlite3.OperationalError, msg:
    print msg
4
ответ дан 1 December 2019 в 05:56
поделиться

SQLite автоматически создает файл базы данных в первый раз, когда Вы пытаетесь использовать его. SQL-операторы для того, чтобы составить таблицы могут использовать IF NOT EXISTS, чтобы заставить команды только вступить в силу, если таблица не была составлена Таким образом, Вы не должны проверять на существование базы данных заранее: SQLite может заботиться об этом для Вас.

главное, по поводу которого я был бы все еще взволнован, состоит в том, что выполнение CREATE TABLE IF EXISTS для каждой веб-транзакции (говорит), было бы неэффективно; можно избежать, чтобы при наличии программы сохранили переменную (в оперативной памяти), говорящую, создало ли это базу данных сегодня, таким образом, это работает CREATE TABLE сценарий однажды на выполнение. Это все еще позволило бы, чтобы Вы удалили базу данных и запустились во время отладки.

7
ответ дан 1 December 2019 в 05:56
поделиться

Как @diciu указанный, файл базы данных будет создан sqlite3.connect. Если Вы хотите принять специальные меры, когда файл не там, необходимо будет явно проверить на существование:

import os
import sqlite3
if not os.path.exists(mydb_path):
    #create new DB, create table stocks
    con = sqlite3.connect(mydb_path)
    con.execute('''create table stocks
      (date text, trans text, symbol text, qty real, price real)''')
else:
    #use existing DB
    con = sqlite3.connect(mydb_path)
...
5
ответ дан 1 December 2019 в 05:56
поделиться

Не делайте это более сложным, чем это должно быть. Большие, независимые базы данных имеют сложную установку и требования конфигурации. SQLite является просто файлом, к которому Вы получаете доступ с SQL, это намного более просто.

Делают следующее.

  1. Добавляют таблицу к Вашей базе данных для "Компонентов" или "Версий" или "Конфигурации" или "Выпуска" или чего-то административного как этот.

    ПЕРЕСМОТР CREATE TABLE (СИМВОЛ RELEASE_NUMBER (20));

  2. В Вашем приложении, соединяйтесь со своей базой данных обычно.

  3. Выполняют простой запрос против таблицы пересмотра. Вот то, что может произойти.
    • запросу не удается выполниться: Ваша база данных не существует, поэтому выполните серию операторов CREATE для создания ее.
    • запрос следует, но не возвращает строк, или номер выпуска ниже, чем ожидалось: Ваша база данных существует, но устарела. Необходимо мигрировать от того выпуска до текущего выпуска. Хотелось бы надеяться, у Вас есть последовательность ОТБРАСЫВАНИЯ, операторы CREATE и ALTER, чтобы сделать это.
    • запрос успешно выполняется, и номер выпуска является математическим ожиданием. Не сделайте ничего больше, Ваша база данных настроена правильно.
29
ответ дан 1 December 2019 в 05:56
поделиться

Да, я уничтожал проблему. Все, что я должен был сделать, было проверить на файл и поймать IOError, если он не существовал.

спасибо за все другие ответы. Они могут пригодиться в будущем.

0
ответ дан 1 December 2019 в 05:56
поделиться

Выполнение в SQL в целом ужасно на любом языке, который я взял. SQLalchemy показал, чтобы быть самым легким от них использовать, потому что фактический запрос и фиксирующий с ним является настолько чистым и отсутствует в проблемах.

Вот некоторые основные шаги при фактическом использовании sqlalchemy в Вашем приложении, лучшие детали могут быть найдены из документации.

  • предоставляют определения таблицы и создают ORM-отображения
  • , база данных загрузки
  • спрашивает, это для составления таблиц из определений (не сделает так, если они будут существовать)
  • , создают производителя сессии (дополнительно)
  • , создают сессию

После создания сессии, можно фиксировать и запросить от базы данных.

3
ответ дан 1 December 2019 в 05:56
поделиться

См. Это решение на SourceForge, которое раскрывает ваш вопрос в учебной манере с поучительным исходным кодом:

y_serial.py module :: хранилище объектов Python с SQLite

«Сериализация + постоянство :: в несколько строк кода, сжимайте и аннотируйте объекты Python в SQLite, а затем извлекайте их в хронологическом порядке по ключевым словам без какого-либо SQL. Самый полезный «стандартный» модуль для базы данных для хранения данных без схемы »

http: // yserial. sourceforge. net

2
ответ дан 1 December 2019 в 05:56
поделиться
Другие вопросы по тегам:

Похожие вопросы: