TL;DR:
I'm trying to debug what is actually being sent to the pyodbc.connect 
function on connect in a custom dialect.  I need to see the connection 
string that is being sent to the pyodbc.connect function *right* before it 
is sent but it has been difficult for me to unravel the layers of 
indirection on the create_engine call. 

Long version:
If you care for more information I have this DSN related connect string for 
the custom dialect I am writing for Teradata:
engine = 
sqlalchemy.create_engine("teradata://testsqlatd:password@td_testsqlatd", 
encoding='utf-8', echo=True)

This connection string works and connects properly to my Teradata box 
(yay!).

In my custom dialect I have subclassed so I can get some visibility into 
the ODBC connect string SQLA is constructing:
    def create_connect_args(self, url):
        connector = super(TeradataDialect_pyodbc, 
self).create_connect_args(url)
        print connector
        return connector

This code appears to call sqlalchemy/connectors/pyodbc.py 
[create_connect_args].  And returns:
[['dsn=td_testsqlatd;UID=testsqlatd;PWD=password'], {}]

I assume that this string is roughly what is passed by SQLA to pyodbc at 
some future point as the ODBC connection string.  In my case the string 
above connects successfully.  Oddly enough though UID is not a valid ODBC 
connection parameter for the Teradata ODBC driver.  For Teradata the 
parameter *must *be Username.  Same with PWD, this isn't valid for the 
Teradata ODBC driver.  It should be Password. 

According to my testing and the Teradata ODBC docs the valid version of 
this ODBC connection string should be:
'dsn=td_testsqlatd;Username=testsqlatd;Password=password'

I have verified directly with pyodbc that the first form of the connect 
string fails and the version directly above works, yet somehow in 
SQLAlchemy it connects.  Because of this I believe that SQLA is rewriting 
the string further before connecting to the Teradata ODBC driver via 
pyodbc.  I can't find out where that is happening though.  Because of this 
I would like to intercept the pyodbc.connect call and see exactly what ODBC 
connection string SQLA is invoking it with. 

Any ideas how to log what exactly the connection string that SQLAlchemy is 
sending to pyodbc.connect?

-- 
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 sqlalchemy+unsubscr...@googlegroups.com.
To post to this group, send email to sqlalchemy@googlegroups.com.
Visit this group at http://groups.google.com/group/sqlalchemy.
For more options, visit https://groups.google.com/d/optout.

Reply via email to