简单/智能,Pythonic数据库解决方案,可以使用Python类型+语法吗? (键/值字典,数组,可能是有序字典)

时间:2010-06-03 22:57:43

标签: database nosql python

寻找可以解决问题的解决方案:

避免

  • 手动编写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不要削减它

我正在寻找更有趣的图书馆建议,而不只是“尝试搁置”或“使用泡菜

我并不反对将Python类用于模型,但它们应该非常直接,不像你在Django和类似的东西中看到的那样。

5 个答案:

答案 0 :(得分:2)

我今天早些时候正在做类似这样的事情。目前还没有自述或足够的测试,但...... http://github.com/mikeboers/LiteMap/blob/master/litemap.py

LiteMap类的行为与内置字典非常相似,但它仍然存在于SQLite数据库中。您没有说明您感兴趣的特定数据库,但这几乎可以简单地修改为任何后端。

它也不会跟踪可变类的更改(例如,在示例中附加到列表中),但API非常简单。

答案 1 :(得分:1)

数据库访问不会比SQLAlchemy好。

答案 2 :(得分:1)

请注意解释Django的模型,你找不到直截了当的东西?以下是我在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的DB模块与Django的其余部分分开,如果这是你所追求的,但它可以完成。

答案 3 :(得分:1)

使用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种不同的数据库后端+谷歌应用引擎。

答案 4 :(得分:1)

问题看起来与http://api.mongodb.org/python/1.9%2B/tutorial.html

非常相似

所以答案是pymongo,还有什么;)

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

我没有对代码进行过测试,但与此不一样

BTW Redish也很有趣也很有趣。