[PonyORM-list] Where is a good place to create the database object? (was Re: no subject)
Stefan Dröge
stefan at sdroege.de
Thu Dec 13 08:38:11 UTC 2018
sorry, forgot to add subject.
Am Do., 13. Dez. 2018 um 09:35 Uhr schrieb Stefan Dröge <stefan at sdroege.de>:
> I already asked the question on stackoverflow, however I just found this
> mailing list, so I thought I'd cross post my question here:
>
> (Original question from Stackoverflow:
> https://stackoverflow.com/questions/53748730/when-using-pony-orm-or-sqlalchemy-where-to-create-database-object
> )
>
> I began playing a bit with Object Relational Mappers (*Pony ORM*
> specifically).
>
> In *Pony*, all entity definitions inherit from the [`db.Entity`][1] class.
> However in order to do that of course the `db` object needs to be created
> first somewhere. (`db.Entity` is somewhat similar to the declarative base
> in *sqlalchemy*, so I believe my question below is also similar valid for
> *sqlalchemy*)
>
> All the examples I have seen in the Pony ORM docs present the examples
> inline, where the Database object `db` is simply declared in the
> interpreter prompt before the entities are declared.
>
> This leaves for me the question: **Where should I create my db object in a
> "real" project?.**
>
> Especially consider the case where I want to keep my entity definitions
> separate from where I actually use these entities (say I only want to build
> a nice ORM wrapper package to access a database, which then should be used
> in multiple different other projects). Then I probably want the users to
> provide the own `db` object that is configured to their needs in order to
> access the DB.
>
> ## Some example code:
>
> Say I have a Database that stores *persons* and *addresses* and my package
> `my_orm` should provide an ORM for the database, which then will be used in
> `app.py`:
>
>
> *my_orm/__init__.py*
>
> from my_orm.person import Person
> from my_orm.address import Address
>
> *my_orm/person.py:*
>
> from pony.orm import Required
>
> class Person(db.Entity): # Where should `db` be defined?
> name = Required(str)
> age = Required(int)
>
> *my_orm/address.py:*
>
> from pony.orm import Required
>
> class Address(db.Entity): # Where should `db` be defined?. Must be the
> same `db` object as in person.py
> street_name = Required(str)
> zip_code = Required(int)
>
> *app.py*
>
> from pony.orm import Database
> db = Database()
> import my_orm
>
> Besides already looking ugly because it mixes the imports with the
> creation of the db, this will also throw the error `NameError: name 'db' is
> not defined`. So what should I do instead?
>
> [1]: https://docs.ponyorm.com/api_reference.html#Database.Entity
> _______________________________________________
> ponyorm-list mailing list
> ponyorm-list at ponyorm.com
> /ponyorm-list
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: </ponyorm-list/attachments/20181213/fab5493c/attachment.html>
More information about the ponyorm-list
mailing list