Простое / Умное, решение для базы данных Pythonic, могут ли использовать типы Python + синтаксис? (Ключ / значение Dict, Array, возможно, Ordered Dict) - PullRequest
4 голосов
/ 04 июня 2010

В поисках решений, которые выходят за рамки и:

Избегать

  • Ручное написание SQL-запросов (Python может быть более OO, не передавая строки DSL)
  • Использование типов данных не-Python для предположительно требуемого определения модели
  • Использование нового класса типов вместо совершенно хороших нативных типов Python

Хвастовство

  • Использование объектов Python
  • Использование объектно-ориентированного и ключевого поиска и создания
  • Быстрое прототипирование
  • Нет таблицы SQL для создания
  • Вывод модели / типа или отсутствие модели
  • Меньше строк и символов для ввода

Простой вывод в JSON , возможно XML или даже протокольные буферы .

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

python
>> from someAmazingDB import *

>> db.taskList = []

>> db['taskList'].append({title:'Beat old sql interfaces','done':False})
>> db.taskList.append({title:'Illustrate different syntax modes','done':True})

#at this point it should autosave
#we should be able to reload the console and access like:
python
>> from someAmazingDB import *
>> print 'Done tasks'
>> for task in db.taskList:
>>     if task.done:
>>         print task
'Illustrate different syntax modes'

Вот проблема: Приведенный выше код должен работать с очень небольшими изменениями или думатьТребуется.Как и другой оператор импорта, и, может быть, немного больше, но Модели Django и SQLAlchemy НЕ РЕШАЮТ .

Я ищу более интересные предложения библиотеки, чем просто " Try Shelve"или" use pickle"

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

Ответы [ 5 ]

2 голосов
/ 04 июня 2010

Сегодня я действительно работал над чем-то вроде этого. Пока нет readme или достаточных тестов, но ... http://github.com/mikeboers/LiteMap/blob/master/litemap.py

Класс LiteMap ведет себя во многом как встроенный dict, но он сохраняется в базе данных SQLite. Вы не указали, какая именно база данных вас интересует, но это может быть почти тривиально изменено на любой серверной части.

Он также не отслеживает изменения в изменяемых классах (например, добавление в список в вашем примере), но API действительно прост.

1 голос
/ 04 ноября 2010

Вопрос выглядит поразительно похожим на http://api.mongodb.org/python/1.9%2B/tutorial.html

Так что ответ пимонго, что еще;)

from pymongo import Connection
connection = Connection()
connection = Connection('localhost', 27017)
tasklist = db['test-tasklist']
tasklist.append({title:'Beat old sql interfaces','done':False})
db.tasklist.append({title:'Illustrate different syntax modes','done':True})
for task in db.tasklist.find({done:True}):
    print task.title

Я не тестировал код, но не буду сильно отличаться от этого

Кстати Красноватый тоже интересно и весело.

1 голос
/ 04 июня 2010

Использование web2py:

>>> from gluon.sql import DAL, Field
>>> db=DAL('sqlite://stoarge.db')
>>> db.define_table('taskList',Field('title'),Field('done','boolean')) # creates the table

>>> db['taskList'].insert(title='Beat old sql interfaces',done=False)
>>> db.taskList.insert(title='Beat old sql interfaces',done=False)

>> for task in db(db.taskList.done==True).select():
>>     print task.title

Поддерживает 10 различных баз данных + механизм приложений Google.

1 голос
/ 04 июня 2010

Не могли бы вы объяснить, что из моделей Django вы не находите простым? Вот как я буду делать то, что у тебя есть в Джанго:

from django.db import models
class Task(models.Model):
    title = models.CharField(max_length=...)
    is_done = models.BooleanField()
    def __unicode__(self):
        return self.title

----

from mysite.tasks.models import Task
t = Task(title='Beat old sql interfaces', is_done=True)
t.save()

----

from mysite.tasks.models import Task
print 'Done tasks'
for task in Task.objects.filter(is_done=True):
    print task

Мне кажется, это довольно просто! Кроме того, это приводит к немного более чистой схеме именования таблиц / объектов IMO. Более сложным является использование модуля БД Django отдельно от остального Django, если это то, что вам нужно, но это можно сделать.

1 голос
/ 04 июня 2010

Доступ к базе данных не лучше, чем SQLAlchemy .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...