<div dir="ltr"><div><div><div><div><div><div><div><div><div><div><div><div><div><div><div><div><div><div><div><div><div><div>Hi,<br><br></div>Yes, it is possible to use the Set attribute without having a real foreign key specified at the database level. But you still need to have a column at the opposite side of the relation.<br><br></div>For example, you can have existing database with Groups and Students tables as following:<br><br></div>create table Groups(<br></div>    id integer primary key,<br></div>    department integer not null<br></div>)<br><br></div>create table Students(<br></div>    id integer primary key,<br></div>    group_id integer not null,<br></div>    name varchar(100) not null,<br></div>    age integer not null<br>)<br><br></div>In this example, Students table has `group_id` column, but this column is defined without foreign key constraint. You can define corresponding Pony entities the following way:<br><br></div>db = Database()<br><br></div>class Group(db.Entity):<br></div>    _table_ = "Groups"<br></div>    id = PrimaryKey(int, auto=True)<br></div>    department = Required(int)<br></div><div>    students = Set("Student")<br></div><div><br></div>class Student(db.Entity):<br></div>    _table_ = "Students"<br></div>    group = Required(Group, column="group_id")<br></div>    name = Required(str)<br></div>    age = Required(int)<br><div><div><div><div><div><div><div><div><br></div><div>Here, I specified explicit table names using the `_table_` option, because by default the table name assumed to be the same as the class name. Also I specified column="group_id" option for the Student.group attribute, because by default attribute name assumed to be equal to the column name.<br></div><div><div><div><br></div><div>Now you can write the following query using the association between entities:<br><br></div><div>select(s for s in Student if s.age > 18 and s.group.department == 1)<br></div><div><br></div><div>When foreign key is defined at the database level, the database will not allow incorrect values in the fk column. Without the foreign key it may be possible to have incorrect values in the `group_id` column. You should ensure that the `group_id` column does not contain incorrect values. When Pony read value from the `group_id` column, it expects that the group object with this id actually exists. If this turns out to be false, Pony will throw exception "UnrepeatableReadError: Phantom object Group[123] disappeared".<div><div><div><div><div><div><div><div><div><div><div><br></div><div>In order to have good performance, the `group_id` column should be indexed. It will work without the index too, but some operations can be slow. If you use MySQL innodb engine, then the index is created automatically if the foreign key is defined. But in other cases the index should be created explicitly. When Pony creates tables it creates all necessary indexes as well, but if you use existing database then you <span id="result_box" class="" lang="en"><span class="">should</span> <span class="">take care of it by yourself.<br><br></span></span></div><div>Regards,<br></div><div>Alexander Kozlovsky<br></div><div><br></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div><div class="gmail_extra"><br><div class="gmail_quote">On Thu, Dec 25, 2014 at 4:58 AM, 王飞 <span dir="ltr"><<a href="mailto:gf0842wf@gmail.com" target="_blank">gf0842wf@gmail.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"><span style="font-size:14px">hello</span><div style="font-size:14px">I didn't use foreign keys, but i want to associated query.</div><div style="font-size:14px">Because of many reasons, I cannot use foreign keys, so the 'Set' type can be specified in a virtual foreign keys for associated query instead of real foreign key?</div></div><div class="HOEnZb"><div class="h5"><div class="gmail_extra"><br><div class="gmail_quote">2014-04-02 10:35 GMT+08:00 王飞 <span dir="ltr"><<a href="mailto:gf0842wf@gmail.com" target="_blank">gf0842wf@gmail.com</a>></span>:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr">Thanks! I hope PonyOrm can develop better.</div><div><div><div class="gmail_extra"><br><br><div class="gmail_quote">2014-04-01 17:30 GMT+08:00 Alexey Malashkevich <span dir="ltr"><<a href="mailto:alexeymalashkevich@gmail.com" target="_blank">alexeymalashkevich@gmail.com</a>></span>:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr">At this point Pony doesn't generate models from the database tables. <br>However Pony can map entities to legacy databases.<br>
For this purpose you can use parameters "_table_", "column", "columns":<br>
<br>    class MyEntity(db.Entity):<br>        _table_ = "legacy_table"<br>        attr1 = Required(unicode, column="db_column1")<br><br>Check the "Mapping customization" part in the Pony documentation for an example<br>

 <a href="http://doc.ponyorm.com/entities.html#mapping-customization" target="_blank">http://doc.ponyorm.com/entities.html#mapping-customization</a><br>Let us know if you have any further questions.<br><br>Regards,<br>Alexey<br>
</div><div class="gmail_extra">
<br><br><div class="gmail_quote"><div>On Tue, Apr 1, 2014 at 8:01 AM, 王飞 <span dir="ltr"><<a href="mailto:gf0842wf@gmail.com" target="_blank">gf0842wf@gmail.com</a>></span> wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<div>
<div dir="ltr">Hi! How can I use pony to generate a model from a legacy database?<br><div>Look forward to your reply.Thanks!<br></div></div>
<br></div>_______________________________________________<br>
ponyorm-list mailing list<br>
<a href="mailto:ponyorm-list@ponyorm.org" target="_blank">ponyorm-list@ponyorm.org</a><br>
<a href="/ponyorm-list" target="_blank">/ponyorm-list</a><br>
<br></blockquote></div><br></div>
<br>_______________________________________________<br>
ponyorm-list mailing list<br>
<a href="mailto:ponyorm-list@ponyorm.org" target="_blank">ponyorm-list@ponyorm.org</a><br>
<a href="/ponyorm-list" target="_blank">/ponyorm-list</a><br>
<br></blockquote></div><br></div>
</div></div></blockquote></div><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>