Thanks Mike for the response and issue creation. So, I've set that case
sensitivity option to True, and we're getting another issue (edge case?)
whereby when we reflect a single table we are doing
Table(metadata=self._metadata, schema=namespace, name=name)
When this is ran I get:
>>> Table(metadata=self._metadata, schema=namespace, name=name)
Out[8]: Traceback (most recent call last):
File
"/Users/adv/anaconda/lib/python2.7/site-packages/IPython/core/formatters.py",
line 222, in catch_format_error
r = method(self, *args, **kwargs)
File
"/Users/adv/anaconda/lib/python2.7/site-packages/IPython/core/formatters.py",
line 699, in __call__
printer.pretty(obj)
File
"/Users/adv/anaconda/lib/python2.7/site-packages/IPython/lib/pretty.py",
line 383, in pretty
return _default_pprint(obj, self, cycle)
File
"/Users/adv/anaconda/lib/python2.7/site-packages/IPython/lib/pretty.py",
line 503, in _default_pprint
_repr_pprint(obj, p, cycle)
File
"/Users/adv/anaconda/lib/python2.7/site-packages/IPython/lib/pretty.py",
line 694, in _repr_pprint
output = repr(obj)
File
"/Users/adv/anaconda/lib/python2.7/site-packages/sqlalchemy/sql/schema.py",
line 604, in __repr__
[repr(x) for x in self.columns] +
AttributeError: 'Table' object has no attribute 'name'
Upon debugging this further, I see the following:
>>> self
Out[9]: Traceback (most recent call last):
File
"/Users/adv/anaconda/lib/python2.7/site-packages/IPython/core/formatters.py",
line 222, in catch_format_error
r = method(self, *args, **kwargs)
File
"/Users/adv/anaconda/lib/python2.7/site-packages/IPython/core/formatters.py",
line 699, in __call__
printer.pretty(obj)
File
"/Users/adv/anaconda/lib/python2.7/site-packages/IPython/lib/pretty.py",
line 383, in pretty
return _default_pprint(obj, self, cycle)
File
"/Users/adv/anaconda/lib/python2.7/site-packages/IPython/lib/pretty.py",
line 503, in _default_pprint
_repr_pprint(obj, p, cycle)
File
"/Users/adv/anaconda/lib/python2.7/site-packages/IPython/lib/pretty.py",
line 694, in _repr_pprint
output = repr(obj)
File
"/Users/adv/anaconda/lib/python2.7/site-packages/sqlalchemy/sql/schema.py",
line 604, in __repr__
[repr(x) for x in self.columns] +
AttributeError: 'Table' object has no attribute 'name'
I've noticed something strange, not sure if it has to do with any of this,
but thought I'd ask... I notice that the quote variable in _metadata had an
error embedded into it in PyCharm, here's what it says...
>>> self._metadata.quote
Traceback (most recent call last):
File
"/Users/adv/anaconda/lib/python2.7/site-packages/IPython/core/interactiveshell.py",
line 2885, in run_code
exec(code_obj, self.user_global_ns, self.user_ns)
File "<ipython-input-6-0723793fe042>", line 1, in <module>
self._metadata.quote
File "<string>", line 2, in quote
File
"/Users/adv/anaconda/lib/python2.7/site-packages/sqlalchemy/util/deprecations.py",
line 106, in warned
return fn(*args, **kwargs)
File
"/Users/adv/anaconda/lib/python2.7/site-packages/sqlalchemy/sql/schema.py",
line 90, in quote
return self.name.quote
AttributeError: 'MetaData' object has no attribute 'name'
Any ideas?
On Monday, April 4, 2016 at 11:12:11 PM UTC-4, Mike Bayer wrote:
>
>
>
> On 04/04/2016 06:10 PM, Douglas Eisenstein wrote:
> > Hi,
> >
> > Here's the situation, we're trying to reflect tables from SQL Server
> > into metadata, and we're encountering a problem of case sensitivity, in
> > particular when it executes the following query:
> > SELECT [C].[COLUMN_NAME], [R].[TABLE_SCHEMA], [R].[TABLE_NAME],
> > [R].[COLUMN_NAME], [REFERENTIAL_CONSTRAINTS_1].[CONSTRAINT_NAME],
> > [REFERENTIAL_CONSTRAINTS_1].[MATCH_OPTION],
> > [REFERENTIAL_CONSTRAINTS_1].[UPDATE_RULE],
> > [REFERENTIAL_CONSTRAINTS_1].[DELETE_RULE]
> > FROM [INFORMATION_SCHEMA].[KEY_COLUMN_USAGE] AS [C],
> > [INFORMATION_SCHEMA].[KEY_COLUMN_USAGE] AS [R],
> > [INFORMATION_SCHEMA].[REFERENTIAL_CONSTRAINTS] AS
> > [REFERENTIAL_CONSTRAINTS_1]
> > WHERE [C].[TABLE_NAME] = CAST(%(table_name_1)s AS NVARCHAR(max)) AND
> > [C].[TABLE_SCHEMA] = CAST(%(table_schema_1)s AS NVARCHAR(max)) AND
> > [C].[CONSTRAINT_NAME] = [REFERENTIAL_CONSTRAINTS_1].[CONSTRAINT_NAME]
> > AND [R].[CONSTRAINT_NAME] =
> > [REFERENTIAL_CONSTRAINTS_1].[UNIQUE_CONSTRAINT_NAME] AND
> > [C].[ORDINAL_POSITION] = [R].[ORDINAL_POSITION] ORDER BY
> > [REFERENTIAL_CONSTRAINTS_1].[CONSTRAINT_NAME], [R].[ORDINAL_POSITION]
> >
> > The issue is that when we have case sensitivity set to False, it runs
> > this statement below (probably because there are two columns names in
> > the result set that are the same name ([C].[COLUMN_NAME], ....
> > [R].[COLUMN_NAME]) and we're getting an error on "by_key[key]" that
> > the key doesn't exist (and by_key.keys() returns a list of all UPPERCASE
> > keys, while it looks like the code is expecting all lowercase keys).
>
> It seems there's a bug in 1.0 (also in 1.1 but with fewer symptoms than
> this) if you set case_sensitive=False on create_engine() with regards to
> result sets that have duplicate non-lower-case columns in them.
>
> https://bitbucket.org/zzzeek/sqlalchemy/issues/3690/dupe-col-logic-when-case-sensitive-is
>
> is added.
>
>
> If
> > we set the case sensitivity to True then it works perfectly fine (but we
> > don't want that set across the board for obvious reasons).
>
> This flag only refers to column names and typically only impacts things
> when you're using Core and targeting at result row values directly with
> string keys. Typically there's no real need to set this flag, as the
> comment states it was there to work around some old edge cases with
> Oracle and Firebird. I'd shoot for keeping the flag set to True.
>
>
>
>
>
> >
> > The issue is when this code result.py
> >
> > if len(by_key)!= num_ctx_cols:
> > seen= set()
> > for recin raw:
> > key= rec[1]
> > if keyin seen:
> > by_key[key]= (None, by_key[key][1],None)
> > seen.add(key)
> >
> >
> > We're using:
> > Microsoft SQL Server 2012 (SP1) - 11.0.3381.0 (X64)
> > Aug 23 2013 20:08:13
> > Copyright (c) Microsoft Corporation
> > Enterprise Edition (64-bit) on Windows NT 6.2 <X64> (Build 9200: )
> > (Hypervisor)
> >
> > pymssql (2.1.2)
> >
> > SQLAlchemy (1.0.12).
> >
> > We've read this article that seems to refer to the kind of problem we're
> > running into, but this resolution didn't seem to help us...
> >
> https://bitbucket.org/zzzeek/sqlalchemy/commits/87bbba32bc54fa0253e9c81663df669dc355f5da
>
> >
> > --
> > 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] <javascript:>
> > <mailto:[email protected] <javascript:>>.
> > To post to this group, send email to [email protected]
> <javascript:>
> > <mailto:[email protected] <javascript:>>.
> > Visit this group at https://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 [email protected].
To post to this group, send email to [email protected].
Visit this group at https://groups.google.com/group/sqlalchemy.
For more options, visit https://groups.google.com/d/optout.