Thanks for such a quick reply. Great to hear that I am starting out on the right path with building a dialect, I have some work to do so I just wanted to make sure I wasn't missing something before I spend the time. Hopefully I can get things working enough where I can post it somewhere.
I have looked at that IBM DB package, unfortunately the iSeries is a "remote" connection using ibm_db meaning I would have to get the Enterprise DB2 connect or get a special quote for unlimited.... makes me laugh a bit what the listed price is. On Saturday, June 7, 2014 5:48:02 PM UTC-7, Michael Bayer wrote: > > > On Jun 7, 2014, at 8:27 PM, Cory Lutton <[email protected] <javascript:>> > wrote: > > I have been looking at using sqlalchemy in an internal company cherrypy > application I am working on. It will need to interface with my companies > iSeries server in order to use ERP data. I have been using pyodbc so far > and everything works great. I am thinking of adding access to another > database that is postgres. Rather than write that stuff again, I was > thinking about trying to use sqlalchemy. If I use that I would want to use > it for both....one for the iSeries (DB2) and one for postgres...... > > So, I started writing a "dialect" for iseries+pyodbc and want to make sure > I am headed down the right path. It seems to be working so far.... > import sqlalchemy as sa > import sqlalchemy_iseries > from urllib.parse import quote > > engine = sa.create_engine( > "iseries+pyodbc:///?odbc_connect={connect}".format( > connect=quote(connect)), pool_size=1) > con = engine.connect() > > # Only using like a pyodbc cursor, executing specifically created > statements. > rows = con.execute("SELECT * FROM alpha.r50all.lbmx") > > # Access via name like a dictionary rather than row.LBID > for row in rows: > print(row['LBID']) > > con.close() > > Being new to sqlalchemy I am hoping to get some advice on whether what I > am doing below is basically going in the right direction or point me in the > right direction if I am headed the wrong way (or reinventing something) > ..... > > Here is what I have so far... > > *__init__.py:* > from sqlalchemy.dialects import registry > from . import pyodbc > > dialect = pyodbc.dialect > > registry.register("iseries.pyodbc", "sqlalchemy_iseries", "dialect") > > *base.py:* > from sqlalchemy.engine import default > > class ISeriesDialect(default.DefaultDialect): > name = 'iseries' > max_identifier_length = 128 > schema_name = "qgpl" > > > *pyodbc.py:* > from .base import ISeriesDialect > from sqlalchemy.connectors.pyodbc import PyODBCConnector > > class ISeriesDialect_pyodbc(PyODBCConnector, ISeriesDialect): > pyodbc_driver_name = 'iSeries Access ODBC Driver' > > def _check_unicode_returns(self, connection): > return False > > dialect = ISeriesDialect_pyodbc > > > > looks great. if you want examples of the full format, take a look at > some of the existing external dialects at > http://docs.sqlalchemy.org/en/rel_0_9/dialects/index.html#external-dialects > . > > Are you sure that the IBM DB SA dialect doesn’t cover this backend > already? They have support for pyodbc + DB2, but I’m not really sure how > “iSeries” differs. https://code.google.com/p/ibm-db/ > > > -- You received this message because you are subscribed to the Google Groups "sqlalchemy" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. To post to this group, send email to [email protected]. Visit this group at http://groups.google.com/group/sqlalchemy. For more options, visit https://groups.google.com/d/optout.
