программирование базы данных python / sql - с чего начать - PullRequest
7 голосов
/ 10 сентября 2009

Как лучше всего использовать встроенную базу данных, скажем, sqlite в Python:

  1. Должен быть небольшой след. Мне нужно всего несколько тысяч записей на таблицу. И только несколько таблиц на базу данных.
  2. Если это предусмотрено установкой Python по умолчанию, тогда отлично. Должно быть с открытым исходным кодом, доступно на Windows и Linus.
  3. Лучше, если SQL не написан напрямую, но ORM полностью не требуется. Что-то, что защитит меня от реальной базы данных, но не такой большой библиотеки. Нечто похожее на ADO будет отличным.
  4. В основном будет использоваться через код, но если есть интерфейс GUI, то это здорово
  5. Нужно всего несколько страниц, чтобы начать работу. Я не хочу пролистывать страницы, читая, что такое таблица и как работает оператор Select. Я все это знаю.
  6. Поддержка Python 3 предпочтительна, но с 2.x тоже все в порядке.

Использование не является веб-приложением. Это небольшая база данных, вмещающая не более 5 таблиц. Данные в каждой таблице - это всего лишь несколько строковых столбцов. Подумайте о чем-то большем, чем маринованный словарь

Обновление : Большое спасибо за отличные предложения.
Вариант использования, о котором я говорю, довольно прост. Один, который вы, вероятно, сделаете за день или два.
Это 100-строчный Python-скрипт, который собирает данные об относительно большом количестве файлов (скажем, 10 КБ) и создает файлы метаданных о них, а затем один большой файл метаданных о всем дереве файлов. Мне просто нужно избегать повторной обработки уже обработанных файлов, создавать метаданные для обновленных файлов и обновлять основной файл метаданных. Таким образом, кэшируйте обработанные данные и обновляйте их только при обновлении файлов. Если кэш поврежден / недоступен, просто обработайте все дерево. Это может занять 20 минут, но ничего страшного.

Обратите внимание, что вся обработка выполняется в памяти.

Я бы хотел избежать каких-либо внешних зависимостей, чтобы скрипт можно было легко установить на любую систему, на которой установлена ​​только программа Python. Будучи Windows, иногда трудно установить все компоненты. Так что, на мой взгляд, даже база данных может быть излишним.

Вероятно, вы бы не запустили Office Word / Writer, чтобы написать небольшую заметку с типом записи, аналогично, я не хочу использовать что-то вроде Django для этого варианта использования.

С чего начать?

Ответы [ 9 ]

6 голосов
/ 11 сентября 2009

Я настоятельно рекомендую использовать хороший ORM. Когда вы можете работать с объектами Python для управления строками базы данных, жизнь становится намного проще.

Я фанат ORM в Джанго. Но это уже было рекомендовано, и вы сказали, что это слишком тяжеловес.

Это дает мне одну рекомендацию: Осень . Очень легкий, отлично работает с SQLite. Если ваше встраиваемое приложение будет многопоточным, то вы обязательно захотите осень; у него есть расширения для поддержки многопоточного SQLite. (Полное раскрытие: я написал эти расширения и предоставил их. Я написал их, работая на RealNetworks, и мои начальники позволили мне пожертвовать их, поэтому публичное спасибо RealNetworks.)

Осень написана на чистом Python. Для SQLite он использует официальный модуль SQLite Python для выполнения фактических действий SQL. След памяти самой осени крошечный.

Я не рекомендую APSW. По моему скромному мнению, это не очень помогает вам; он просто обеспечивает способ выполнения операторов SQL и позволяет вам освоить способ выполнения SQL-операций. Кроме того, он поддерживает все функции SQLite, даже те, которые вы редко используете, и в результате он на самом деле имеет больший объем памяти, чем осень, и при этом не так прост в использовании.

3 голосов
/ 11 сентября 2009

Что вам нужно, так это SQLAlchemy , который быстро становится де-факто стандартным уровнем доступа к данным Python. Чтобы сделать ваши первые опыты с SQLAlchemy еще проще, посмотрите Elixir , который является тонкой оболочкой в ​​стиле ActiveRecord для SQLAlchemy.

Обновление : перечитал вопрос и увидел, что нет необходимости в полном ORM. Я бы все-таки предложил пойти по пути SQLAlchemy, просто потому, что он дает вам смехотворно простой способ работы с базами данных в Python, который вы можете использовать для любой базы данных. Время, потраченное на работу непосредственно с SQLite, теряется, если вам нужно подключиться к Oracle или чему-то еще.

3 голосов
/ 10 сентября 2009

Я начал здесь:

http://www.devshed.com/c/a/Python/Using-SQLite-in-Python

Это 5 (коротких) страниц с только самыми необходимыми вещами, и я сразу начал работать.

2 голосов
/ 10 сентября 2009

начать с Джанго

http://www.djangoproject.com/

ORM - путь сюда. Вы не пожалеете об этом. Учебник здесь http://docs.djangoproject.com/en/dev/intro/tutorial01/ довольно мягкий.

Почему Django / ORM? Django запустит вас примерно через полчаса, будет управлять вашими соединениями с базой данных, интерфейсами управления данными и т. Д. Django работает с SQLLite: вам не нужно управлять экземпляром MySQL / PostGre.

РЕДАКТИРОВАТЬ1: Вам не нужно использовать часть Django для веб-приложений. Вы можете использовать классы db.Model для непосредственного управления вашими данными. Какое бы автономное приложение или скрипт вы ни предложили, вы можете просто использовать слой модели данных Django. И когда вы решите, что вам нужен веб-интерфейс, или, по крайней мере, хотите отредактировать ваши данные через консоль администратора - вы можете написать здесь и поблагодарить меня (или всех, кто сказал, что используют ORM):)

1 голос
/ 11 сентября 2009

Это совокупность ответов в произвольном порядке:

Все рекомендуют слой ORM. Что имеет смысл, если вам действительно нужна база данных. Ну, это было как-то запрошено в заголовке: -)

  1. SQLAlchemy
  2. Осень
  3. Django ORM
  4. Использовать официальную поддержку SQLite Pysqlite
  5. Шторм
  6. Эликсир
  7. Просто используйте собственный рассол Python

Но я начинаю думать, что, если базы данных в памяти достаточно, она будет использоваться только в сценариях, а не в веб-приложении или даже в графическом интерфейсе рабочего стола, тогда опция 7 также является абсолютно допустимой при условии отсутствия транзакции. необходима поддержка, и целостность базы данных не является проблемой.

0 голосов
/ 04 ноября 2013

Если вы не хотите использовать ORM, вы можете попробовать python-sql для создания ваших SQL-запросов.

0 голосов
/ 26 ноября 2009

Существует простой в использовании модуль Python, который отвечает всем заявленным целям:

http://yserial.sourceforge.net/

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

Удивительно, но нет большой разницы между встроенной памятью и постоянными решениями для большинства практических целей.

Что касается "оградить меня от реальной базы данных", то с помощью y_serial нельзя даже сказать, что SQLite стоит за всем этим. Если вы создаете свои записи как словари Python, вы можете сосредоточиться только на написании кода (не хранимых процедур).

0 голосов
/ 11 сентября 2009

Еще один вариант добавления к другим хорошим предложениям: Эликсир . Он обеспечивает упрощенный декларативный слой поверх SQLAlchemy, поэтому вам будет проще погрузиться в него, но он также позволяет вам использовать полную мощность SQLAlchemy, если и когда вам это нужно.

0 голосов
/ 10 сентября 2009

Джанго идеально подходит для этого, но у автора нет ясности, нужно ли ему на самом деле создать скомпилированный EXE или веб-приложение. Django только для веб-приложений.

Я не уверен, откуда ты на самом деле становишься "тяжелым". Django значительно меньше в строках кода, чем любая другая основная платформа веб-приложений.

...