从sqlalchemy到django集成库
aldjem的Python项目详细描述
基
用于将SqLalCyy集成到现有Django项目中的小程序包。 这个包的主要用例是构建复杂的查询 对于django orm是不可能的。
您需要在安装的应用程序的末尾包含aldjemy。当模型是 导入后,aldjemy将读取所有模型并为它们贡献sa属性。 sa属性是一个类,映射到表类。
在内部,aldjemy从django模型生成表。这很重要 与使用sqlalchemy反射的标准决策的区别。
代码示例:
User.sa.query().filter(User.sa.username=='Brubeck')
M2M样品:
User.sa.query().join(User.sa.groups).filter(Group.sa.name=="GROUP_NAME")
显式联接是sqlalchemy哲学的一部分,因此aldjemy不能准确地了解您 和Django一样的经历。 但奥尔杰米并没有被定位为django orm的替代品。它是特殊情况下的帮手。
我们在阿尔杰米的缓存里也有一些东西:
fromaldjemyimportcorecore.Cache.models# All generated modelscore.get_tables()# All tables, and M2M tables too
如果你需要的话,你可以使用这些东西-也许你想用表或者类似的东西来构建查询。
设置
您可以添加自己的字段类型以将django类型映射到sqlalchemy类型 ALDJEMY_DATA_TYPES设置参数。 参数必须是dict,键是field.get_internal_type()的结果, 值必须是单参数函数。你可以从aldjemy.types那里得到主意。
还可以扩展/重写受支持的sqlalchemy引擎的列表 使用ALDJEMY_ENGINES设置参数。 参数应该是dict,键是中最后一个点之后的子字符串 django数据库引擎设置(例如,sqlite3来自django.db.backends.sqlite3), 值是用于连接的sqlalchemy驱动程序(例如sqlite,sqlite+pysqlite)。 如果您想使用django-postgrespool,这可能会有帮助。
django模型通常具有帮助函数和属性,这些函数和属性有助于 表示模型的数据(\uu unicode\u),或表示一些基于模型的逻辑。
将其与Aldjimy模型结合起来,可以把这些方法分成一个单独的混入:classTaskMixin(object):def__unicode__(self):returnself.codeclassTask(TaskMixin,models.Model):aldjemy_mixin=TaskMixincode=models.CharField(_('code'),max_length=32,unique=True)
喂!您可以在AldjeMy类上使用
如果要公开所有方法和属性而不创建
单独的MIXIN类,可以使用
fromaldjemy.metaimportAldjemyMetaclassTask(models.Model):code=models.CharField(_('code'),max_length=32,unique=True)def__unicode__(self):returnself.code__metaclass__=AldjemyMeta
结果与上面的示例相同,只是您不需要 完全创建MIXIN类。
还要注意,对于python 3,语法有点不同:
classTask(models.Model,metaclass=AldjemyMeta):code=models.CharField(_('code'),max_length=32,unique=True)def__str__(self):returnself.code