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

2024-10-03 23:24:19 发布

您现在位置:Python中文网/ 问答频道 /正文

寻找突破极限的解决方案:

避免

  • 手动编写SQL查询(Python可以更面向对象而不传递DSL字符串)
  • 将非Python数据类型用于假定需要的模型定义
  • 使用一个新的类型类而不是非常好的原生Python类型

吹嘘

  • 使用Python对象
  • 使用面向对象和基于键的检索和创建
  • 快速原型
  • 没有要生成的SQL表
  • 模型或无模型推理
  • 要键入的行和字符更少

可以轻松地输出到JSON和协议缓冲区。在

我做网页,桌面和移动软件开发,所以越便携越好。在

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'

这是一个挑战:上面的代码应该只需要很少的修改或思考即可工作。像一个不同的import语句,可能更多一些,但是Django模型和SQLAlchemy不能阻止它。在

我正在寻找比“Try Shelve”或“使用pickle”更有趣的库建议

我不反对将Python类用于模型,但是它们应该是非常直接的,不像Django和类似的东西。在


Tags: from模型import类型taskdbsqltitle
3条回答

想解释一下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的其他部分分开使用,如果这是你想要的,但它是可以做到的。在

今天早些时候我也在做类似的事情。但自述文件还不够。。。http://github.com/mikeboers/LiteMap/blob/master/litemap.py

LiteMap类的行为与内置dict非常相似,但它会持久存在于SQLite数据库中。您没有指出您对哪个特定的数据库感兴趣,但这可以在任何后端进行几乎微不足道的修改。在

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

数据库访问不会比SQLAlchemy好。在

相关问题 更多 >