2009-09-10 2 views
7

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

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

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

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

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

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

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

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

+0

Это веб-приложение или настольное приложение? –

+0

не веб-приложение. Едва настольное приложение. В этом конкретном случае мне нужно сохранить некоторые метаданные о многих файлах и некоторых их содержаниях. CRUD и UI не нужны, кроме как для отладки. – Ayman

+0

Я не понимаю этого «легкого» требования и того, как ORM не подходит. Под «тяжеловесом» вы имеете в виду: 1. слишком сложно определить 2. требования к памяти/диску? 3. слишком много функциональности? –

ответ

1

Это совокупность ответов, в частности, нет порядка:

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

  1. SQLAlchemy
  2. Autumn
  3. Django ORM
  4. использования официальной поддержки SQLite Pysqlite
  5. Storm
  6. Elixir
  7. Просто используйте в Python собственный Pickle

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

+0

, если вы решите использовать SQLite, то SQLiteSpy (http://www.yunqa.de/delphi/doku.php/products/sqlitespy/index) станет интерфейсом графического интерфейса пользователя. Я лично использовал SQLAlchemy с Elixir, но я должен признать, что я никогда не использовал Autumn (теперь смотрю) – van

+0

@Ayman: SQLite может хранить в памяти и может быть быстрее для некоторых операций (например, для агрегирования), чем операции Python объектов, поскольку он хранит значения, а не объекты. Должен профиль и видеть ... – voyager

2

начать с Django

http://www.djangoproject.com/

ОРМ является путь здесь. Вы не пожалеете об этом. Урок здесь http://docs.djangoproject.com/en/dev/intro/tutorial01/ довольно нежный.

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

EDIT1: для этого вам не нужно использовать часть веб-приложения Django. Вы можете использовать классы db.Model для непосредственного управления вашими данными. Независимо от того, какое автономное приложение/сценарий вы придумаете, вы можете просто использовать слой модели данных Django. И когда вы решите, что хотите веб-интерфейс или по крайней мере хотите отредактировать свои данные через консоль администратора, вы можете отправить сюда и поблагодарить меня (или всех, кто сказал, использовать ОРМ):

+0

Django, даже если он замечательный, слишком «тяжелый» для моих нужд. Что-то гораздо меньшего размера. – Ayman

+0

что делает его «тяжелым»? о каком «следе» вы говорите? –

3

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

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

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

+0

С учетом даты публикации ... http://docs.python.org/library/sqlite3.html pysqlite был доступен как sqlite3 с Python 2.5. –

+0

Я думаю, что ORM, такой как Autumn, намного проще работать с базой данных. SQL может быть сложным; очень приятно иметь ОРМ, скрывать беспорядочные детали и просто сосредоточиться на своих данных и на том, что вы хотите с ним делать. – steveha

+0

@steveha: Это зависит от того, что вы делаете, и от вашего понимания SQL. Если вам нужно просто хранить объекты в базе данных, тогда ORM является приемлемым, но иногда ваши потребности могут не соответствовать возможностям ORM. – voyager

0

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

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

+0

@ Ответ на скрипт довольно близок к тому, что я хочу. Я создаю веб-приложение, поэтому не думаю, что мне нужен Django. – Ayman

+0

@Ayman: вы можете использовать ORM Django автономно. Тем не менее, это может не соответствовать вашим требованиям. – voyager

6

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

Я являюсь поклонником ОРМ в Django. Но это уже было рекомендовано, и вы сказали, что это слишком тяжелый вес.

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

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

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

3

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

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

+0

Я работал с SQLAlchemy, и это довольно хорошо. Однако он имеет гораздо больший объем памяти, чем Autumn, и имеет функции, которые вряд ли понадобится встроенному приложению. Наш проект в RealNetworks начал с использования SQLAlchemy, заигрывал с APSW, а затем переключился на Осень. (Я согласен, что он не должен пытаться работать непосредственно с SQLite, но я думаю, что вряд ли он когда-либо попытается встроить Oracle во встроенное приложение.) – steveha

+0

@steveha, я не предлагаю, чтобы он необходимо внедрить Oracle в подобную небольшую программу. Я предполагаю, что в какой-то момент ему нужно будет подключиться к базе данных другого типа, и изучение одного мощного и универсального способа сделать это облегчит ему жизнь в будущем. – Kevin

+0

@Kevin: достаточно справедливо. И вы ясно сказали «подключиться к Oracle», а не «вставлять Oracle» ... извините. – steveha

0

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

0

Там легкий в использовании модуль Python, который отвечает всем поставленным задачам:

http://yserial.sourceforge.net/

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

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

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

0

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