<div dir="ltr"><div><span style="font-family:arial,sans-serif;font-size:13px">The thing is that SQLAlchemy and Pony ORM have different approaches to user-specified table names.<br><br>SQLAlchemy treats all-lowercase table names as 'case-insensitive' and converts such names in Oracle to all-uppercase. This has the benefit of portability, that is, if a programmer in SQLAlchemy specifies __tablename__ = 'lowercase_name' then this name will be treated as case-insensitive disregarding of the current database. But the downside of such approach is that you cannot specify real all-lowercase table name in Oracle, because such name will be always converted to upper-case.</span><br style="font-family:arial,sans-serif;font-size:13px">

<div style="font-family:arial,sans-serif;font-size:13px"><br>Because of this SQLAlchemy peculiarity, sqlacodegen returns table name as all-lowercase, whereas in reality it is all-uppercase.<br><br>In contrast, Pony ORM doesn't do any mangling with the explicitly specified table names. You write it in lowercase, you get lowercase. Such table name will not be cross-database portable in terms of case insensitivity, but this gives the full control to programmer. But in the absence of the explicit table name declaration Pony ORM constructs table name from the entity name, and such name is constructed as case-insensitive (all-lowercase in MySQL and PostgreSQL, and all-uppercase in Oracle).</div>

<div style="font-family:arial,sans-serif;font-size:13px"><br>> I used sqlacodengen and ran it towards the database schema (yes I am lazy) . </div><div style="font-family:arial,sans-serif;font-size:13px">> It produces the classes automatically but with  SQLAlchemy syntax.</div>

<div style="font-family:arial,sans-serif;font-size:13px">> I then wrote a small script to translate the syntax to pony.orm'ish.<br><br>I think that your script should do the following transformation of table name generated by sqlacodegen: If table name is all-lowercase and the database is Oracle, then table name should be converted to all-uppercase.<br>

<br>> I will get around to test this better soon but I wish sqlcodegen had "--pony.orm" arg. It wold make life so much easier . :-)<br><br>Thanks for the suggestion, we'll try to make pool request to sqlacodegen for supporting Pony ORM syntax, or write similar tool for Pony ORM by ourselves.</div>

<div style="font-family:arial,sans-serif;font-size:13px"><br></div><div style="font-family:arial,sans-serif;font-size:13px">Regards,<br>Alexander Kozlovsky<br><br></div></div><div class="gmail_extra"><br><br><div class="gmail_quote">

On Tue, Jul 29, 2014 at 8:58 AM, Bjarni Hákonarson <span dir="ltr"><<a href="mailto:bjarni@prentvorur.is" target="_blank">bjarni@prentvorur.is</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>Thanks for the reply.</div></div><div><br></div><div>I am sure I violated bunch of rules in this approach but "users are stupid" is in my opinion the first rule in software development.</div>


<div><br></div><div>Full disclosure:</div><div><br></div><div>What I did was this.</div><div><br></div><div>I used sqlacodengen and ran it towards the database schema (yes I am lazy) . </div><div>It produces the classes automatically but with  SQLAlchemy syntax.</div>


<div><br></div><div>I then wrote a small script to translate the syntax to pony.orm'ish.</div><div><br></div><div>The result is as an example below.</div><div><br></div><div>class Customer(db.Entity):</div><div>    _table_ = 'customers'</div>


<div><br></div><div>    pk = PrimaryKey(int, auto=True)</div><div>    name = Optional(unicode)</div><div>    natid = Required(int)</div><div>    address = Optional(unicode)</div><div>    address2 = Optional(unicode)</div>


<div>    state = Optional(unicode)</div><div>    zip = Optional(unicode)</div><div>    city = Optional(unicode)</div><div>    phone = Optional(int)</div><div>    billing_contact = Optional(unicode)</div><div>    sysadmin = Optional(unicode)</div>


<div>    active = Optional(int, default=1)</div><div>    site = Set("Sites")</div><div>    person = Set("Persons")</div><div><br></div><div>I generally prefer to create my database schema myself using  naming conventions like PK for Primary keys and fk_<table></div>


<div>as the first columns if applicable. Create sequences and insert triggers because so many things come free that way.</div><div><br></div><div>This time I finished writing the app and used cx_Oracle direct with the associating, painstaking finger work. </div>


<div><br></div><div>I will get around to test this better soon but I wish sqlcodegen had "--pony.orm" arg. It wold make life so much easier . :-)</div><div><br></div><div>Kind regards,</div><div>Bjarni</div><div>


<br></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></div>