You probably need to hit that flag early before anything connects.  A safe 
place would be in the dbapi() accessor itself, or in the __init__ method of the 
dialect class.

Sent from my iPhone

> On Oct 24, 2014, at 1:32 PM, Lycovian <mfwil...@gmail.com> wrote:
> 
> Thanks for the reply Mike.  I've been tracking SQLAlchemy for years now and 
> it's probably some of the best code, docs, and support I've ever seen.
> 
> Yes, I have verified that pyodbc and the pooling flag work:
> In [1]: import pyodbc
> In [2]: pyodbc.pooling = False
> In [3]: conn = pyodbc.connect
> pyodbc.connect
> In [3]: conn = pyodbc.connect('DSN=tdprod')
> In [4]: conn.execute('select current_timestamp').fetchall()
> Out[4]: [(datetime.datetime(2014, 10, 24, 9, 22, 34, 270000), )]
> In [5]: pyodbc.pooling = True
> In [6]: conn.execute('select current_timestamp').fetchall()
> Out[6]: [(datetime.datetime(2014, 10, 24, 9, 22, 46, 500000), )]
> 
> Without pooling (and with core dump):
> In [1]: import pyodbc
> In [2]: conn = pyodbc.connect('DSN=tdprod')
> Fatal Python error: Unable to set SQL_ATTR_CONNECTION_POOLING attribute.
> Aborted (core dumped)
> 
> 
> Since a "generic" pyodbc connection is out, can you comment on how I could 
> set the pyodbc.pooling flag as part of a dialect?  To get me off the ground 
> please see below for my bootstrap base.py and pyodbc.py for a Teradata 
> dialect that could use pyodbc.  I have been unable to set pyodbc.pooling 
> appropriately.  Feel free to comment additionally on the best way to create a 
> minimal functional dialect that would pass a basic test harness.
> 
> <base.py>
> import operator
> import re
> 
> from sqlalchemy.sql import compiler, expression, text, bindparam
> from sqlalchemy.engine import default, base, reflection
> from sqlalchemy import types as sqltypes
> from sqlalchemy.sql import operators as sql_operators
> from sqlalchemy import schema as sa_schema
> from sqlalchemy import util, sql, exc
> 
> from sqlalchemy.types import CHAR, VARCHAR, TIME, NCHAR, NVARCHAR,\
>     TEXT, DATE, DATETIME, FLOAT, NUMERIC,\
>     BIGINT, INT, INTEGER, SMALLINT, BINARY,\
>     VARBINARY, DECIMAL, TIMESTAMP, Unicode,\
>     UnicodeText, REAL
> 
> RESERVED_WORDS = set([])
> 
> class TeradataTypeCompiler(compiler.GenericTypeCompiler):
>     pass
> 
> class TeradataInspector(reflection.Inspector):
>     pass
> 
> class TeradataExecutionContext(default.DefaultExecutionContext):
>     pass
> 
> class TeradataSQLCompiler(compiler.SQLCompiler):
>     pass
> 
> class TeradataDDLCompiler(compiler.DDLCompiler):
>     pass
> 
> class TeradataIdentifierPreparer(compiler.IdentifierPreparer):
>     reserved_words = RESERVED_WORDS
> 
> class TeradataDialect(default.DefaultDialect):
>     pass
> </base.py>
> 
> <pyodbc.py>
> import pyodbc
> 
> from .base import TeradataDialect, TeradataExecutionContext
> from sqlalchemy.connectors.pyodbc import PyODBCConnector
> 
> pyodbc.pooling = False
> 
> class TeradataExecutionContext_pyodbc(TeradataExecutionContext):
>     pass
> 
> class TeradataDialect_pyodbc(PyODBCConnector, TeradataDialect):
>     execution_ctx_cls = TeradataExecutionContext_pyodbc
> 
>     pyodbc_driver_name = 'Teradata'
> 
>     def initialize(self, connection):
> 
>         # Teradata requires pooling off for pyodbc
>         super(TeradataDialect_pyodbc, self).initialize(connection)
>         self.dbapi.pooling = False
> 
> dialect = TeradataDialect_pyodbc
> </pyodbc.py>
>  
> If there is any way to make this simpler please let me know, but in 
> particular for this very simple dialect I need to be able to set the 
> pyodbc.pooling attribute to False.
> 
> 
> 
>> On Thursday, October 23, 2014 9:38:30 PM UTC-7, Michael Bayer wrote:
>> 
>>> On Oct 23, 2014, at 2:50 PM, Lycovian <mfwi...@gmail.com> wrote:
>>> 
>>> Is there a way to use a pyodbc connection without a dialect?
>> 
>> there is not.   the dialect is responsible for formulating SQL of the format 
>> that the database understands as well as dealing with idiosyncrasies of the 
>> DBAPI driver (of which pyodbc has many, many, many, which are also specific 
>> to certain databases).
>> 
>> 
>>> 
>>> Barring that working which seems unlikely since I can't find any working 
>>> examples, I have started stubbing out a very simple Teradata dialect but I 
>>> can't figure out how to manually set pyodbc.pooling = False.  This is 
>>> required as the TD ODBC driver will core dump on connect if this isn't set. 
>>>  I've tried the following in the my pyodbc.py my dialect but on testing it 
>>> core dumps indicating the value isn't being set.
>>> 
>>> Here is the pyodbc.py for my TD dialect.  I'm trying to control pooling in 
>>> two different ways in this example but neither works:
>> 
>> 
>> 
>> 
>> have you tried talking to your database using just pyodbc directly?  does 
>> this flag even work ?
> 
> -- 
> 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.

-- 
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