从sqlalchemy到django集成库

aldjem的Python项目详细描述


Build statusDownloadsDownloads


用于将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驱动程序(例如sqlitesqlite+pysqlite)。 如果您想使用django-postgrespool,这可能会有帮助。

< H2>混合蛋白< /H2>

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类上使用 Unicode ,因为这个混音将是 混合到生成的aldjemy模型中。

如果要公开所有方法和属性而不创建 单独的MIXIN类,可以使用 AldJeMy.Meta .AldjeMyMeta 元类:

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

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java在通过url读取csv文件时,我想用数据映射列名   java在没有类型转换的情况下访问父类型的arraylist中的特定子类型方法,子类型的创建只有在运行时才知道   java扩展UIComponentBase时如何保存状态   java如何使用字符串作为Velocity模板?   用于调试远程/本地java应用程序的自定义调试器   JavaFx和浮动按钮   java如何修改列表中的对象?在迭代时扩展MyObject>?   java Spring框架如何避免控制器中的重复代码?   java代码名1 IOS签名   一点Bitly API有Java库吗?   jasper报告将Highcharts图表添加到使用JavaAPI生成的JasperReport模板中   swing如何在java中更改按键的颜色   java Javax Websocket使用路径参数提交登录数据,好的做法?