<html>
  <head>
    <meta content="text/html; charset=UTF-8" http-equiv="Content-Type">
  </head>
  <body text="#000000" bgcolor="#FFFFFF">
    It doesn't work for me.<br>
    <br>
    I have a Customers entity with 'licences' field as Set which is in
    relation with Licences entity which have back relation field
    'customer' as Required(Customers).<br>
    <br>
    Hence i must supply customer's id for 'customer' field while add
    licence to a customer object.<br>
    <br>
    I must do the following:<br>
    <br>
    cust = Customer(name='asd',email='<a class="moz-txt-link-abbreviated" href="mailto:asd@qwe.com">asd@qwe.com</a>') <- it doesn't
    create id before commiting it.<br>
    <br>
    lic = cust.licences.add(<br>
        customer=cust.id, <- required filed in DB model. related to
    Customers record by PK.<br>
        x=1,<br>
        y=2<br>
    )<br>
    <br>
    But newly created object has no id since it wasn't written to DB
    yet.<br>
    <br>
    May be Pony allows child entities without Required fields linking
    entity back to a parent entity, but i didn't try it.<br>
    <br>
    <div class="moz-cite-prefix">On 25.03.2015 11:03, Matthew Bell
      wrote:<br>
    </div>
    <blockquote
cite="mid:CAPjpKnpW2szeuAgG9iv1qN3TrhViLfwL=jPGTHZ0ER1frtwH8Q@mail.gmail.com"
      type="cite">
      <div dir="ltr">
        <div>
          <div>
            <div>You don't need the PK to add a relation, you can do:<br>
              <br>
              <font face="FreeMono">cust =
                Customers(name='GazMyas',city='Chelyabinsk')</font> <br>
            </div>
            cust.licenses.add(License(x=1, y=2))<br>
            cust.licenses.add(License(x=3, y=4))<br>
            <br>
          </div>
          So, create the customer, then loop over all licenses for that
          customer, doing customer.licenses.add<br>
          <br>
        </div>
        You can then commit after each iteration, or just once at the
        end of the script, up to you.<br>
      </div>
      <div class="gmail_extra"><br>
        <div class="gmail_quote">On 25 March 2015 at 08:28, Вадим Бажов
          <span dir="ltr"><<a moz-do-not-send="true"
              href="mailto:vadim@ideco.ru" target="_blank">vadim@ideco.ru</a>></span>
          wrote:<br>
          <blockquote class="gmail_quote" style="margin:0 0 0
            .8ex;border-left:1px #ccc solid;padding-left:1ex">
            <div text="#000000" bgcolor="#FFFFFF"> Hello happy pony
              users and devs !<br>
              <br>
              I do an import from old db to a new one, driven by pony
              orm. Import iterates over records of customers and their
              related licences, fetched from an old DB. So we have to
              fill two tables in new DB: Customers table and Licence
              table with records, which have one2many relations (one
              Customer can have many Licences, by PK). PK is an
              autoincrementing integer in both tables.<br>
              <br>
              Within <b>each iteration</b> of import i need to write
              one Customer record and its Licences records to new DB.
              Licence records should have customer_id fields filled up
              with corresponding Customer PKs. Here we have a problem:<br>
              <br>
              If we create an object of an entity Customers : <font
                face="FreeMono">cust =
                Customers(name='GazMyas',city='Chelyabinsk')</font> , it
              wont be recorded to a DB exactly at this moment and we
              wont able to use its ID (pk of the record) to bind Licence
              records to it. In other words there is no '<a
                moz-do-not-send="true" href="http://cust.id"
                target="_blank">cust.id</a>' element at this moment.<br>
              <br>
              We can do a 'commit()' each time we create a Customer
              object. After that '<a moz-do-not-send="true"
                href="http://cust.id" target="_blank">cust.id</a>' comes
              ready. But in case of monstrous imports with over 20 000
              records committing every record to hdd slows down the
              import process to hours. And hangs up your server hard
              drive. Anyway, it's a bad practice to commit every record
              walking the huge array of incoming data.<br>
              <br>
              So, by now, I fill up two dicts with Customers records,
              incrementing their ID's manually (customer_id += 1) and
              Licences records bound to this pre-calculated ID's. When
              dicts are ready, I write them to a new DB walking through
              them.<br>
              <br>
              Is there a better way to complete a data import without
              filling up transition dicts and calculating autoincrement
              IDs by hand ? Can I somehow use PKs of the records before
              committing them to DB ?<br>
            </div>
            <br>
            _______________________________________________<br>
            ponyorm-list mailing list<br>
            <a moz-do-not-send="true"
              href="mailto:ponyorm-list@ponyorm.org">ponyorm-list@ponyorm.org</a><br>
            <a moz-do-not-send="true"
              href="/ponyorm-list"
              target="_blank">/ponyorm-list</a><br>
            <br>
          </blockquote>
        </div>
        <br>
        <br clear="all">
        <br>
        -- <br>
        <div class="gmail_signature">Regards,<br>
          <br>
          Matthew Bell<br>
        </div>
      </div>
      <br>
      <fieldset class="mimeAttachmentHeader"></fieldset>
      <br>
      <pre wrap="">_______________________________________________
ponyorm-list mailing list
<a class="moz-txt-link-abbreviated" href="mailto:ponyorm-list@ponyorm.org">ponyorm-list@ponyorm.org</a>
<a class="moz-txt-link-freetext" href="/ponyorm-list">/ponyorm-list</a>
</pre>
    </blockquote>
    <br>
  </body>
</html>