<div dir="ltr">Hi Bruce!<br><br>> <span style="font-size:13px">We really require the ability to add an entity to the schema while the using application is active.</span><br><br>Currently Pony doesn't allow to change or add entities to Database object after the mapping was generated. Theoretically, in the future we can allow it, but it will complicate internal architecture. What should we do when in multi-threaded application one thread starts a transaction and the other thread starts changing database entities? Currently the logic is simple, you just create all entities and then start working with them in any thread.<br><br>> <span style="font-size:13px">Do you have any suggestions / work-arounds (besides re-initializing the Database object)?</span><br><br>If it is possible, could you describe your use-case in more detail? Why re-initializing of the Database object is not suitable for you?<br><br>Note that you can have several Database objects working with the same physical database. For example, you can have one Database object for "static" entities which remains the same during your application lifetime, and the other Database object for "dynamic" entities which is created programmatically. When you list of "dynamic" entities is changed, you can do db.disconnect() for previous "dynamic" db object, and then create new db object with updated entity definitions. This is the example of how you can create entity programmatically:<br><br><div>    from pony import orm</div><div>    from pony.orm.core import EntityMeta</div><div><br>    db = orm.Database()</div><div><br>    attrs = {}</div><div>    attrs['id'] = orm.PrimaryKey(int, auto=True)</div><div>    attrs['name'] = orm.Required(str)</div><div>    attrs['age'] = orm.Required(int)</div><div><br>    Person = EntityMeta('Person', (db.Entity,), attrs)</div><div><br>    db.bind('sqlite', ':memory:')<br></div><div>    db.generate_mapping(create_tables=True)<br></div><br>    with db_session:<br>        p1 = Person(name='John', age=20)<br><br>Tell me what do you think about having two Database objects in you application<br><br><br>Regards,<br>Alexander Kozlovsky<br><br></div><div class="gmail_extra"><br><div class="gmail_quote">On Wed, Dec 3, 2014 at 6:46 AM, Bruce Petersen <span dir="ltr"><<a href="mailto:bruce.petersen@ironsafe.com" target="_blank">bruce.petersen@ironsafe.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr"><div><div><div><div><div><div>Greetings!<br><br></div>I'm seeing great advantages to Pony -- however, perhaps you can help me through one major stumbling block:<br><br></div>Our app requires that tables (and their classes) be created on-the-fly.  Given my understanding of the lifecycle of entity mappings, it looks like entity mappings really cannot be created dynamically.  That is, it looks like Pony requires that Entities need to be mapped before any using application starts, yes?  Any attempt to sub-class Entity results in an exception once the first generate_mapping is called.<br><br></div>We really require the ability to add an entity to the schema while the using application is active.  We've been using SqlAlchemy to create models throughout the life of the application -- we were very much looking forward to using Pony's awesome features.<br><br></div><div>Do you have any suggestions / work-arounds (besides re-initializing the Database object)?<br><br></div><div>Many  Thanks,<br><br>Bruce<br><br></div><div><br></div><br><br></div></div></div>
<br>_______________________________________________<br>
ponyorm-list mailing list<br>
<a href="mailto:ponyorm-list@ponyorm.org">ponyorm-list@ponyorm.org</a><br>
<a href="/ponyorm-list" target="_blank">/ponyorm-list</a><br>
<br></blockquote></div><br></div>