morepath中的小型orm集成

more.pon的Python项目详细描述


more.pony:morepath中的小马orm集成

此包为Pony提供了更多路径集成 对象关系映射程序库。

此包将数据库会话绑定到请求,以便 您可以直接与应用程序中的数据库交互 不使用db_session

快速启动

安装more.pony

$ pip install -U more.pony

从Ponyapp扩展应用程序类:

frommore.ponyimportPonyAppclassApp(PonyApp):pass

创建您的模型:

frompony.ormimportDatabase,PrimaryKey,Optionaldb=Database()classDocument(db.Entity):_table_='document'id=PrimaryKey(int,auto=True)title=Optional(str)content=Optional(str)defupdate(self,payload={}):self.set(**payload)defremove(self):self.delete()

在开始脚本中设置数据库:

importmorepathfrom.appimportAppfrom.modelimportdbdefrun():db.bind(provider='sqlite',filename='app.db',create_db=True)db.generate_mapping(create_tables=True)morepath.autoscan()morepath.run(App())

现在您可以在您的路径中使用该模型:

from.appimportAppfrom.modelimportDocument@App.path(model=Document,path='documents/{id}')defget_document(request,id=0):returnDocument[id]

在您看来:

from.appimportAppfrom.modelimportDocument@App.json(model=Document)defdocument_default(self,request):return{'id':self.id,'title':self.title,'content':self.content,'link':request.link(self)}@App.json(model=Document,request_method='PUT')defdocument_update(self,request):self.update(request.json)@App.json(model=Document,request_method='DELETE')defdocument_remove(self,request):self.remove()

设置

您可以设置传递给^{tt1}的参数$ 在设置的pony部分。

默认设置为:

@App.setting_section(section='pony')defget_pony_settings():return{'allowed_exceptions':[],'immediate':False,'retry':0,'retry_exceptions':[TransactionError],'serializable':False,'strict':False}

有关在Pony API documentation中找到的参数的详细信息。

您还可以使用databasesettings部分进行数据库设置, 它允许您使用不同的设置进行生产、开发和 测试环境。

只需为每个环境创建一个应用程序并加载特定的 设置文件:

classApp(PonyApp):passwithopen('settings/default.yml')asdefaults:defaults_dict=yaml.load(defaults)App.init_settings(defaults_dict)classProductionApp(App):passwithopen('settings/production.yml')assettings:settings_dict=yaml.load(settings)ProductionApp.init_settings(settings_dict)classTestApp(App):passwithopen('settings/test.yml')assettings:settings_dict=yaml.load(settings)TestApp.init_settings(settings_dict)

yaml设置中的数据库配置 根据使用的数据库,文件可以 看起来像:

database:provider:sqlitefilename:app.dbcreate_db:true

在开始脚本中,设置数据库并加载 根据RUN_ENV环境变量的应用程序:

importosimportmorepathfrom.appimportApp,ProductionApp,TestAppfrom.modelimportdbdefsetup_db(app):db_params=app.settings.database.__dict__.copy()db.bind(**db_params)db.generate_mapping(create_tables=True)defrun():morepath.autoscan()ifos.getenv('RUN_ENV')=='production':ProductionApp.commit()app=ProductionApp()elifos.getenv('RUN_ENV')=='test':TestApp.commit()app=TestApp()else:App.commit()app=App()setup_db(app)morepath.run(app)

有关找到的数据库配置的详细信息 在PonyOrm documentation中。

副作用

如果你想引发副作用(如发送电子邮件或 在数据库提交时,您可以发出一个信号 在引发副作用的视图的@request.after中。

像这样的副作用会在 只有当数据库会话没有回滚时,它才会被提交。

此示例使用more.emit

@App.json(model=Document,request_method='PUT')defdocument_update(self,request):self.update(request.json)@request.afterdefafter(response):request.app.signal.emit('document_updated',self,request)

另外,你也可以在你的模型中使用Ponyorm after_insert()after_update()after_delete() 实体挂钩。 这样可以确保触发副作用 在数据库会话提交之后。

缺点是你不容易接近 模型中的请求或应用程序。

更改

0.2(2017-07-20)

  • 升级ponyorm至0.7.2。
  • 在示例和测试中,使用听写将参数传递给db.bind。

0.1(2017-04-22)

  • 首次公开发行。

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

推荐PyPI第三方库


热门话题
java Hibernate sql查询处理速度比普通查询慢   java ringbuffer没有读取正确的数据   我们可以用java来解码哈夫曼代码吗   java切换按钮鼠标侦听器空指针异常   使用JNA的Java Windows任务栏如何将窗口图标(HICON)转换为Java图像?   部署在tomcat上的webapp的java集成测试覆盖率?   java是Hibernate3。是否与Log4j2兼容?   HttpClient的java Set静态代理   java通过批处理文件编译和运行Oracle openscript   java如何转换:cut(Orange.class)>cut(Orange)   gzip如何在JAVA中解压缩gzip内容   Java Paypal集成SOAP JAXWS SSL握手异常   jsf如何使数字输入区最初为空,而不是0或0.00?   在Spring引导中使用REST API时发生java错误   java在jface tableviewer中显示多个图像   JAVAutil。扫描仪解释这行代码是用JAVA编写的