Re: [sqlalchemy] cannot access tables
On Friday, August 15, 2014 8:28:41 PM UTC-5, Michael Bayer wrote: On Aug 15, 2014, at 5:03 PM, Greg Silverman g...@umn.edu javascript: wrote: Then, I thought, what if this is an SQLAlchemy issue. Looks to be. I ran the following script as a test: import pyodbc import sqlalchemy from sqlalchemy.engine import reflection from sqlalchemy.engine.reflection import Inspector def connect(): return pyodbc.connect( 'DRIVER={FreeTDS};SERVER=ip_address;' 'DATABASE=db_name;UID=test;PWD=test;port=1433;' 'TDS_Version=9.1;') engine = sqlalchemy.create_engine('mssql://', creator=connect) conn = engine.connect() print conn for row in engine.execute('select 6 * 7 as [Result];'): print row.Result insp = reflection.Inspector.from_engine(engine) table_name = 'irb_desc' table_names = insp.get_table_names() if table_name not in table_names: print 'A' Again, I am connecting fine with the database create.engine method (that is '42' is printing as expected), but when I run the inspector.get_table_names method with the given conditional it is printing the 'A' (I have tried other table names in the same database to which I added 'irbd_balance,' all with the same result. what is the SQL output if you set echo=‘debug’; then, take the SQL you see and take a look at what it’s SELECTing so you can see what might be wrong. Probably some schema name setting or something like that. Thanks, I did not realize this was an option (actually, it is echo=True, but at least I can see the SQL being sent). Hopefully this will lead me to an answer. Greg-- -- 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.
Re: [sqlalchemy] cannot access tables
SELECT default_schema_name FROM sys.database_principals WHERE name = ? AND type = 'S' On Mon, Aug 18, 2014 at 9:47 AM, Horcle g...@umn.edu wrote: On Friday, August 15, 2014 8:28:41 PM UTC-5, Michael Bayer wrote: On Aug 15, 2014, at 5:03 PM, Greg Silverman g...@umn.edu wrote: Then, I thought, what if this is an SQLAlchemy issue. Looks to be. I ran the following script as a test: import pyodbc import sqlalchemy from sqlalchemy.engine import reflection from sqlalchemy.engine.reflection import Inspector def connect(): return pyodbc.connect( 'DRIVER={FreeTDS};SERVER=ip_address;' 'DATABASE=db_name;UID=test;PWD=test;port=1433;' 'TDS_Version=9.1;') engine = sqlalchemy.create_engine('mssql://', creator=connect) conn = engine.connect() print conn for row in engine.execute('select 6 * 7 as [Result];'): print row.Result insp = reflection.Inspector.from_engine(engine) table_name = 'irb_desc' table_names = insp.get_table_names() if table_name not in table_names: print 'A' Again, I am connecting fine with the database create.engine method (that is '42' is printing as expected), but when I run the inspector.get_table_names method with the given conditional it is printing the 'A' (I have tried other table names in the same database to which I added 'irbd_balance,' all with the same result. what is the SQL output if you set echo=‘debug’; then, take the SQL you see and take a look at what it’s SELECTing so you can see what might be wrong. Probably some schema name setting or something like that. Thanks, I did not realize this was an option (actually, it is echo=True, but at least I can see the SQL being sent). Hopefully this will lead me to an answer. Greg-- -- You received this message because you are subscribed to a topic in the Google Groups sqlalchemy group. To unsubscribe from this topic, visit https://groups.google.com/d/topic/sqlalchemy/YSjU_Ohsyvw/unsubscribe. To unsubscribe from this group and all its topics, 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. -- Greg M. Silverman Senior Developer Analyst Cardiovascular Informatics http://www.med.umn.edu/cardiology/ University of Minnesota 612-626-0919 g...@umn.edu › flora-script http://flora-script.grenzi.org/ ‹ › grenzi.org ‹ -- 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.
Re: [sqlalchemy] cannot access tables
On Mon, Aug 18, 2014 at 3:47 PM, Horcle g...@umn.edu wrote: On Friday, August 15, 2014 8:28:41 PM UTC-5, Michael Bayer wrote: On Aug 15, 2014, at 5:03 PM, Greg Silverman g...@umn.edu wrote: Then, I thought, what if this is an SQLAlchemy issue. Looks to be. I ran the following script as a test: import pyodbc import sqlalchemy from sqlalchemy.engine import reflection from sqlalchemy.engine.reflection import Inspector def connect(): return pyodbc.connect( 'DRIVER={FreeTDS};SERVER=ip_address;' 'DATABASE=db_name;UID=test;PWD=test;port=1433;' 'TDS_Version=9.1;') engine = sqlalchemy.create_engine('mssql://', creator=connect) conn = engine.connect() print conn for row in engine.execute('select 6 * 7 as [Result];'): print row.Result insp = reflection.Inspector.from_engine(engine) table_name = 'irb_desc' table_names = insp.get_table_names() if table_name not in table_names: print 'A' Again, I am connecting fine with the database create.engine method (that is '42' is printing as expected), but when I run the inspector.get_table_names method with the given conditional it is printing the 'A' (I have tried other table names in the same database to which I added 'irbd_balance,' all with the same result. what is the SQL output if you set echo=‘debug’; then, take the SQL you see and take a look at what it’s SELECTing so you can see what might be wrong. Probably some schema name setting or something like that. Thanks, I did not realize this was an option (actually, it is echo=True, but at least I can see the SQL being sent). Hopefully this will lead me to an answer. echo='debug' will show you more information than echo=True (it shows the rows coming back as well as the query that is sent) Simon -- 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.
Re: [sqlalchemy] cannot access tables
Indeed! Here is the output: gms$ python test_connect.py 2014-08-18 10:17:28,095 INFO sqlalchemy.engine.base.Engine SELECT user_name() 2014-08-18 10:17:28,095 INFO sqlalchemy.engine.base.Engine () 2014-08-18 10:17:28,097 DEBUG sqlalchemy.engine.base.Engine Col ('',) 2014-08-18 10:17:28,098 DEBUG sqlalchemy.engine.base.Engine Row (u'dbo', ) 2014-08-18 10:17:28,099 INFO sqlalchemy.engine.base.Engine SELECT default_schema_name FROM sys.database_principals WHERE name = ? AND type = 'S' 2014-08-18 10:17:28,099 INFO sqlalchemy.engine.base.Engine (u'dbo',) 2014-08-18 10:17:28,101 DEBUG sqlalchemy.engine.base.Engine Col ('default_schema_name',) 2014-08-18 10:17:28,103 INFO sqlalchemy.engine.base.Engine SELECT CAST('test plain returns' AS VARCHAR(60)) AS anon_1 2014-08-18 10:17:28,103 INFO sqlalchemy.engine.base.Engine () 2014-08-18 10:17:28,106 INFO sqlalchemy.engine.base.Engine SELECT CAST('test unicode returns' AS NVARCHAR(60)) AS anon_1 2014-08-18 10:17:28,106 INFO sqlalchemy.engine.base.Engine () sqlalchemy.engine.base.Connection object at 0x101839490 2014-08-18 10:17:28,382 INFO sqlalchemy.engine.base.Engine select 6 * 7 as [Result]; 2014-08-18 10:17:28,382 INFO sqlalchemy.engine.base.Engine () 2014-08-18 10:17:28,384 DEBUG sqlalchemy.engine.base.Engine Col ('Result',) 2014-08-18 10:17:28,384 DEBUG sqlalchemy.engine.base.Engine Row (42, ) 42 2014-08-18 10:17:28,389 INFO sqlalchemy.engine.base.Engine SELECT [TABLES_1].[TABLE_NAME] FROM [INFORMATION_SCHEMA].[TABLES] AS [TABLES_1] WHERE [TABLES_1].[TABLE_SCHEMA] = CAST(? AS NVARCHAR(max)) AND [TABLES_1].[TABLE_TYPE] = ? ORDER BY [TABLES_1].[TABLE_NAME] 2014-08-18 10:17:28,389 INFO sqlalchemy.engine.base.Engine (u'dbo', 'BASE TABLE') 2014-08-18 10:17:28,394 DEBUG sqlalchemy.engine.base.Engine Col ('TABLE_NAME',) A Not quite sure how to parse this? For example, is u'dbo' what is being used as the schema? Greg-- On Monday, August 18, 2014 10:05:09 AM UTC-5, Simon King wrote: On Mon, Aug 18, 2014 at 3:47 PM, Horcle g...@umn.edu javascript: wrote: On Friday, August 15, 2014 8:28:41 PM UTC-5, Michael Bayer wrote: On Aug 15, 2014, at 5:03 PM, Greg Silverman g...@umn.edu wrote: Then, I thought, what if this is an SQLAlchemy issue. Looks to be. I ran the following script as a test: import pyodbc import sqlalchemy from sqlalchemy.engine import reflection from sqlalchemy.engine.reflection import Inspector def connect(): return pyodbc.connect( 'DRIVER={FreeTDS};SERVER=ip_address;' 'DATABASE=db_name;UID=test;PWD=test;port=1433;' 'TDS_Version=9.1;') engine = sqlalchemy.create_engine('mssql://', creator=connect) conn = engine.connect() print conn for row in engine.execute('select 6 * 7 as [Result];'): print row.Result insp = reflection.Inspector.from_engine(engine) table_name = 'irb_desc' table_names = insp.get_table_names() if table_name not in table_names: print 'A' Again, I am connecting fine with the database create.engine method (that is '42' is printing as expected), but when I run the inspector.get_table_names method with the given conditional it is printing the 'A' (I have tried other table names in the same database to which I added 'irbd_balance,' all with the same result. what is the SQL output if you set echo=‘debug’; then, take the SQL you see and take a look at what it’s SELECTing so you can see what might be wrong. Probably some schema name setting or something like that. Thanks, I did not realize this was an option (actually, it is echo=True, but at least I can see the SQL being sent). Hopefully this will lead me to an answer. echo='debug' will show you more information than echo=True (it shows the rows coming back as well as the query that is sent) Simon -- 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.
Re: [sqlalchemy] cannot access tables
I think you are seeing, for each query: 1. The query itself 2. The parameters being passed in to the query 3. The names of the columns being returned 4. The returned rows, if any. So for example, the first thing that happens is: SELECT user_name() with no parameters () returning a result set containing a single column with no name: ('',) followed by a single row containing a single value, the unicode string dbo: (u'dbo', ) The second query goes like this: SELECT default_schema_name FROM sys.database_principals WHERE name = ? AND type = 'S' Note the bound parameter (name = ?). The next line tells us that SA is sending the unicode string dbo for that parameter: (u'dbo',) The result set has a single column called 'default_schema_name': ('default_schema_name',) ...but there are no matching rows. Then a bit further along, SA is running this query: SELECT [TABLES_1].[TABLE_NAME] FROM [INFORMATION_SCHEMA].[TABLES] AS [TABLES_1] WHERE [TABLES_1].[TABLE_SCHEMA] = CAST(? AS NVARCHAR(max)) AND [TABLES_1].[TABLE_TYPE] = ? ORDER BY [TABLES_1].[TABLE_NAME] ...passing the parameters dbo and BASE TABLE, but not getting any results back. I don't know anything about MS-SQL so can't tell you why that is, but perhaps you've got enough information to carry on digging? Hope that helps, Simon On Mon, Aug 18, 2014 at 4:27 PM, Horcle g...@umn.edu wrote: Indeed! Here is the output: gms$ python test_connect.py 2014-08-18 10:17:28,095 INFO sqlalchemy.engine.base.Engine SELECT user_name() 2014-08-18 10:17:28,095 INFO sqlalchemy.engine.base.Engine () 2014-08-18 10:17:28,097 DEBUG sqlalchemy.engine.base.Engine Col ('',) 2014-08-18 10:17:28,098 DEBUG sqlalchemy.engine.base.Engine Row (u'dbo', ) 2014-08-18 10:17:28,099 INFO sqlalchemy.engine.base.Engine SELECT default_schema_name FROM sys.database_principals WHERE name = ? AND type = 'S' 2014-08-18 10:17:28,099 INFO sqlalchemy.engine.base.Engine (u'dbo',) 2014-08-18 10:17:28,101 DEBUG sqlalchemy.engine.base.Engine Col ('default_schema_name',) 2014-08-18 10:17:28,103 INFO sqlalchemy.engine.base.Engine SELECT CAST('test plain returns' AS VARCHAR(60)) AS anon_1 2014-08-18 10:17:28,103 INFO sqlalchemy.engine.base.Engine () 2014-08-18 10:17:28,106 INFO sqlalchemy.engine.base.Engine SELECT CAST('test unicode returns' AS NVARCHAR(60)) AS anon_1 2014-08-18 10:17:28,106 INFO sqlalchemy.engine.base.Engine () sqlalchemy.engine.base.Connection object at 0x101839490 2014-08-18 10:17:28,382 INFO sqlalchemy.engine.base.Engine select 6 * 7 as [Result]; 2014-08-18 10:17:28,382 INFO sqlalchemy.engine.base.Engine () 2014-08-18 10:17:28,384 DEBUG sqlalchemy.engine.base.Engine Col ('Result',) 2014-08-18 10:17:28,384 DEBUG sqlalchemy.engine.base.Engine Row (42, ) 42 2014-08-18 10:17:28,389 INFO sqlalchemy.engine.base.Engine SELECT [TABLES_1].[TABLE_NAME] FROM [INFORMATION_SCHEMA].[TABLES] AS [TABLES_1] WHERE [TABLES_1].[TABLE_SCHEMA] = CAST(? AS NVARCHAR(max)) AND [TABLES_1].[TABLE_TYPE] = ? ORDER BY [TABLES_1].[TABLE_NAME] 2014-08-18 10:17:28,389 INFO sqlalchemy.engine.base.Engine (u'dbo', 'BASE TABLE') 2014-08-18 10:17:28,394 DEBUG sqlalchemy.engine.base.Engine Col ('TABLE_NAME',) A Not quite sure how to parse this? For example, is u'dbo' what is being used as the schema? Greg-- On Monday, August 18, 2014 10:05:09 AM UTC-5, Simon King wrote: On Mon, Aug 18, 2014 at 3:47 PM, Horcle g...@umn.edu wrote: On Friday, August 15, 2014 8:28:41 PM UTC-5, Michael Bayer wrote: On Aug 15, 2014, at 5:03 PM, Greg Silverman g...@umn.edu wrote: Then, I thought, what if this is an SQLAlchemy issue. Looks to be. I ran the following script as a test: import pyodbc import sqlalchemy from sqlalchemy.engine import reflection from sqlalchemy.engine.reflection import Inspector def connect(): return pyodbc.connect( 'DRIVER={FreeTDS};SERVER=ip_address;' 'DATABASE=db_name;UID=test;PWD=test;port=1433;' 'TDS_Version=9.1;') engine = sqlalchemy.create_engine('mssql://', creator=connect) conn = engine.connect() print conn for row in engine.execute('select 6 * 7 as [Result];'): print row.Result insp = reflection.Inspector.from_engine(engine) table_name = 'irb_desc' table_names = insp.get_table_names() if table_name not in table_names: print 'A' Again, I am connecting fine with the database create.engine method (that is '42' is printing as expected), but when I run the inspector.get_table_names method with the given conditional it is printing the 'A' (I have tried other table names in the same database to which I added 'irbd_balance,' all with the same result. what is the SQL output if you set echo=‘debug’; then, take the SQL you see and take a look at what it’s SELECTing so you can see what might be wrong. Probably some
Re: [sqlalchemy] cannot access tables
Thanks, this does help. I was wondering why the return results had no values given. Greg-- On Monday, August 18, 2014 11:17:48 AM UTC-5, Simon King wrote: I think you are seeing, for each query: 1. The query itself 2. The parameters being passed in to the query 3. The names of the columns being returned 4. The returned rows, if any. So for example, the first thing that happens is: SELECT user_name() with no parameters () returning a result set containing a single column with no name: ('',) followed by a single row containing a single value, the unicode string dbo: (u'dbo', ) The second query goes like this: SELECT default_schema_name FROM sys.database_principals WHERE name = ? AND type = 'S' Note the bound parameter (name = ?). The next line tells us that SA is sending the unicode string dbo for that parameter: (u'dbo',) The result set has a single column called 'default_schema_name': ('default_schema_name',) ...but there are no matching rows. Then a bit further along, SA is running this query: SELECT [TABLES_1].[TABLE_NAME] FROM [INFORMATION_SCHEMA].[TABLES] AS [TABLES_1] WHERE [TABLES_1].[TABLE_SCHEMA] = CAST(? AS NVARCHAR(max)) AND [TABLES_1].[TABLE_TYPE] = ? ORDER BY [TABLES_1].[TABLE_NAME] ...passing the parameters dbo and BASE TABLE, but not getting any results back. I don't know anything about MS-SQL so can't tell you why that is, but perhaps you've got enough information to carry on digging? Hope that helps, Simon On Mon, Aug 18, 2014 at 4:27 PM, Horcle g...@umn.edu javascript: wrote: Indeed! Here is the output: gms$ python test_connect.py 2014-08-18 10:17:28,095 INFO sqlalchemy.engine.base.Engine SELECT user_name() 2014-08-18 10:17:28,095 INFO sqlalchemy.engine.base.Engine () 2014-08-18 10:17:28,097 DEBUG sqlalchemy.engine.base.Engine Col ('',) 2014-08-18 10:17:28,098 DEBUG sqlalchemy.engine.base.Engine Row (u'dbo', ) 2014-08-18 10:17:28,099 INFO sqlalchemy.engine.base.Engine SELECT default_schema_name FROM sys.database_principals WHERE name = ? AND type = 'S' 2014-08-18 10:17:28,099 INFO sqlalchemy.engine.base.Engine (u'dbo',) 2014-08-18 10:17:28,101 DEBUG sqlalchemy.engine.base.Engine Col ('default_schema_name',) 2014-08-18 10:17:28,103 INFO sqlalchemy.engine.base.Engine SELECT CAST('test plain returns' AS VARCHAR(60)) AS anon_1 2014-08-18 10:17:28,103 INFO sqlalchemy.engine.base.Engine () 2014-08-18 10:17:28,106 INFO sqlalchemy.engine.base.Engine SELECT CAST('test unicode returns' AS NVARCHAR(60)) AS anon_1 2014-08-18 10:17:28,106 INFO sqlalchemy.engine.base.Engine () sqlalchemy.engine.base.Connection object at 0x101839490 2014-08-18 10:17:28,382 INFO sqlalchemy.engine.base.Engine select 6 * 7 as [Result]; 2014-08-18 10:17:28,382 INFO sqlalchemy.engine.base.Engine () 2014-08-18 10:17:28,384 DEBUG sqlalchemy.engine.base.Engine Col ('Result',) 2014-08-18 10:17:28,384 DEBUG sqlalchemy.engine.base.Engine Row (42, ) 42 2014-08-18 10:17:28,389 INFO sqlalchemy.engine.base.Engine SELECT [TABLES_1].[TABLE_NAME] FROM [INFORMATION_SCHEMA].[TABLES] AS [TABLES_1] WHERE [TABLES_1].[TABLE_SCHEMA] = CAST(? AS NVARCHAR(max)) AND [TABLES_1].[TABLE_TYPE] = ? ORDER BY [TABLES_1].[TABLE_NAME] 2014-08-18 10:17:28,389 INFO sqlalchemy.engine.base.Engine (u'dbo', 'BASE TABLE') 2014-08-18 10:17:28,394 DEBUG sqlalchemy.engine.base.Engine Col ('TABLE_NAME',) A Not quite sure how to parse this? For example, is u'dbo' what is being used as the schema? Greg-- On Monday, August 18, 2014 10:05:09 AM UTC-5, Simon King wrote: On Mon, Aug 18, 2014 at 3:47 PM, Horcle g...@umn.edu wrote: On Friday, August 15, 2014 8:28:41 PM UTC-5, Michael Bayer wrote: On Aug 15, 2014, at 5:03 PM, Greg Silverman g...@umn.edu wrote: Then, I thought, what if this is an SQLAlchemy issue. Looks to be. I ran the following script as a test: import pyodbc import sqlalchemy from sqlalchemy.engine import reflection from sqlalchemy.engine.reflection import Inspector def connect(): return pyodbc.connect( 'DRIVER={FreeTDS};SERVER=ip_address;' 'DATABASE=db_name;UID=test;PWD=test;port=1433;' 'TDS_Version=9.1;') engine = sqlalchemy.create_engine('mssql://', creator=connect) conn = engine.connect() print conn for row in engine.execute('select 6 * 7 as [Result];'): print row.Result insp = reflection.Inspector.from_engine(engine) table_name = 'irb_desc' table_names = insp.get_table_names() if table_name not in table_names: print 'A' Again, I am connecting fine with the database create.engine method (that
Re: [sqlalchemy] cannot access tables
It looks like the code that runs the SELECT default_schema_name query has changed since the version you are running: https://bitbucket.org/zzzeek/sqlalchemy/commits/1fb4ad75a38c It might be worth upgrading to the latest release. Simon On Mon, Aug 18, 2014 at 5:22 PM, Horcle g...@umn.edu wrote: Thanks, this does help. I was wondering why the return results had no values given. Greg-- On Monday, August 18, 2014 11:17:48 AM UTC-5, Simon King wrote: I think you are seeing, for each query: 1. The query itself 2. The parameters being passed in to the query 3. The names of the columns being returned 4. The returned rows, if any. So for example, the first thing that happens is: SELECT user_name() with no parameters () returning a result set containing a single column with no name: ('',) followed by a single row containing a single value, the unicode string dbo: (u'dbo', ) The second query goes like this: SELECT default_schema_name FROM sys.database_principals WHERE name = ? AND type = 'S' Note the bound parameter (name = ?). The next line tells us that SA is sending the unicode string dbo for that parameter: (u'dbo',) The result set has a single column called 'default_schema_name': ('default_schema_name',) ...but there are no matching rows. Then a bit further along, SA is running this query: SELECT [TABLES_1].[TABLE_NAME] FROM [INFORMATION_SCHEMA].[TABLES] AS [TABLES_1] WHERE [TABLES_1].[TABLE_SCHEMA] = CAST(? AS NVARCHAR(max)) AND [TABLES_1].[TABLE_TYPE] = ? ORDER BY [TABLES_1].[TABLE_NAME] ...passing the parameters dbo and BASE TABLE, but not getting any results back. I don't know anything about MS-SQL so can't tell you why that is, but perhaps you've got enough information to carry on digging? Hope that helps, Simon On Mon, Aug 18, 2014 at 4:27 PM, Horcle g...@umn.edu wrote: Indeed! Here is the output: gms$ python test_connect.py 2014-08-18 10:17:28,095 INFO sqlalchemy.engine.base.Engine SELECT user_name() 2014-08-18 10:17:28,095 INFO sqlalchemy.engine.base.Engine () 2014-08-18 10:17:28,097 DEBUG sqlalchemy.engine.base.Engine Col ('',) 2014-08-18 10:17:28,098 DEBUG sqlalchemy.engine.base.Engine Row (u'dbo', ) 2014-08-18 10:17:28,099 INFO sqlalchemy.engine.base.Engine SELECT default_schema_name FROM sys.database_principals WHERE name = ? AND type = 'S' 2014-08-18 10:17:28,099 INFO sqlalchemy.engine.base.Engine (u'dbo',) 2014-08-18 10:17:28,101 DEBUG sqlalchemy.engine.base.Engine Col ('default_schema_name',) 2014-08-18 10:17:28,103 INFO sqlalchemy.engine.base.Engine SELECT CAST('test plain returns' AS VARCHAR(60)) AS anon_1 2014-08-18 10:17:28,103 INFO sqlalchemy.engine.base.Engine () 2014-08-18 10:17:28,106 INFO sqlalchemy.engine.base.Engine SELECT CAST('test unicode returns' AS NVARCHAR(60)) AS anon_1 2014-08-18 10:17:28,106 INFO sqlalchemy.engine.base.Engine () sqlalchemy.engine.base.Connection object at 0x101839490 2014-08-18 10:17:28,382 INFO sqlalchemy.engine.base.Engine select 6 * 7 as [Result]; 2014-08-18 10:17:28,382 INFO sqlalchemy.engine.base.Engine () 2014-08-18 10:17:28,384 DEBUG sqlalchemy.engine.base.Engine Col ('Result',) 2014-08-18 10:17:28,384 DEBUG sqlalchemy.engine.base.Engine Row (42, ) 42 2014-08-18 10:17:28,389 INFO sqlalchemy.engine.base.Engine SELECT [TABLES_1].[TABLE_NAME] FROM [INFORMATION_SCHEMA].[TABLES] AS [TABLES_1] WHERE [TABLES_1].[TABLE_SCHEMA] = CAST(? AS NVARCHAR(max)) AND [TABLES_1].[TABLE_TYPE] = ? ORDER BY [TABLES_1].[TABLE_NAME] 2014-08-18 10:17:28,389 INFO sqlalchemy.engine.base.Engine (u'dbo', 'BASE TABLE') 2014-08-18 10:17:28,394 DEBUG sqlalchemy.engine.base.Engine Col ('TABLE_NAME',) A Not quite sure how to parse this? For example, is u'dbo' what is being used as the schema? Greg-- On Monday, August 18, 2014 10:05:09 AM UTC-5, Simon King wrote: On Mon, Aug 18, 2014 at 3:47 PM, Horcle g...@umn.edu wrote: On Friday, August 15, 2014 8:28:41 PM UTC-5, Michael Bayer wrote: On Aug 15, 2014, at 5:03 PM, Greg Silverman g...@umn.edu wrote: Then, I thought, what if this is an SQLAlchemy issue. Looks to be. I ran the following script as a test: import pyodbc import sqlalchemy from sqlalchemy.engine import reflection from sqlalchemy.engine.reflection import Inspector def connect(): return pyodbc.connect( 'DRIVER={FreeTDS};SERVER=ip_address;' 'DATABASE=db_name;UID=test;PWD=test;port=1433;' 'TDS_Version=9.1;') engine = sqlalchemy.create_engine('mssql://', creator=connect) conn = engine.connect() print conn for row in engine.execute('select 6 * 7 as [Result];'): print row.Result insp = reflection.Inspector.from_engine(engine) table_name = 'irb_desc'
Re: [sqlalchemy] cannot access tables
Thanks for the heads up. Unfortunately, it did not help. In any case, the issue appears to be that while the last query DOES return a record set when run as straight up SQL on the server, it does not work as desirecd through SQLAlchemy. More digging to be done. Greg-- On Monday, August 18, 2014 11:30:39 AM UTC-5, Simon King wrote: It looks like the code that runs the SELECT default_schema_name query has changed since the version you are running: https://bitbucket.org/zzzeek/sqlalchemy/commits/1fb4ad75a38c It might be worth upgrading to the latest release. Simon On Mon, Aug 18, 2014 at 5:22 PM, Horcle g...@umn.edu javascript: wrote: Thanks, this does help. I was wondering why the return results had no values given. Greg-- On Monday, August 18, 2014 11:17:48 AM UTC-5, Simon King wrote: I think you are seeing, for each query: 1. The query itself 2. The parameters being passed in to the query 3. The names of the columns being returned 4. The returned rows, if any. So for example, the first thing that happens is: SELECT user_name() with no parameters () returning a result set containing a single column with no name: ('',) followed by a single row containing a single value, the unicode string dbo: (u'dbo', ) The second query goes like this: SELECT default_schema_name FROM sys.database_principals WHERE name = ? AND type = 'S' Note the bound parameter (name = ?). The next line tells us that SA is sending the unicode string dbo for that parameter: (u'dbo',) The result set has a single column called 'default_schema_name': ('default_schema_name',) ...but there are no matching rows. Then a bit further along, SA is running this query: SELECT [TABLES_1].[TABLE_NAME] FROM [INFORMATION_SCHEMA].[TABLES] AS [TABLES_1] WHERE [TABLES_1].[TABLE_SCHEMA] = CAST(? AS NVARCHAR(max)) AND [TABLES_1].[TABLE_TYPE] = ? ORDER BY [TABLES_1].[TABLE_NAME] ...passing the parameters dbo and BASE TABLE, but not getting any results back. I don't know anything about MS-SQL so can't tell you why that is, but perhaps you've got enough information to carry on digging? Hope that helps, Simon On Mon, Aug 18, 2014 at 4:27 PM, Horcle g...@umn.edu wrote: Indeed! Here is the output: gms$ python test_connect.py 2014-08-18 10:17:28,095 INFO sqlalchemy.engine.base.Engine SELECT user_name() 2014-08-18 10:17:28,095 INFO sqlalchemy.engine.base.Engine () 2014-08-18 10:17:28,097 DEBUG sqlalchemy.engine.base.Engine Col ('',) 2014-08-18 10:17:28,098 DEBUG sqlalchemy.engine.base.Engine Row (u'dbo', ) 2014-08-18 10:17:28,099 INFO sqlalchemy.engine.base.Engine SELECT default_schema_name FROM sys.database_principals WHERE name = ? AND type = 'S' 2014-08-18 10:17:28,099 INFO sqlalchemy.engine.base.Engine (u'dbo',) 2014-08-18 10:17:28,101 DEBUG sqlalchemy.engine.base.Engine Col ('default_schema_name',) 2014-08-18 10:17:28,103 INFO sqlalchemy.engine.base.Engine SELECT CAST('test plain returns' AS VARCHAR(60)) AS anon_1 2014-08-18 10:17:28,103 INFO sqlalchemy.engine.base.Engine () 2014-08-18 10:17:28,106 INFO sqlalchemy.engine.base.Engine SELECT CAST('test unicode returns' AS NVARCHAR(60)) AS anon_1 2014-08-18 10:17:28,106 INFO sqlalchemy.engine.base.Engine () sqlalchemy.engine.base.Connection object at 0x101839490 2014-08-18 10:17:28,382 INFO sqlalchemy.engine.base.Engine select 6 * 7 as [Result]; 2014-08-18 10:17:28,382 INFO sqlalchemy.engine.base.Engine () 2014-08-18 10:17:28,384 DEBUG sqlalchemy.engine.base.Engine Col ('Result',) 2014-08-18 10:17:28,384 DEBUG sqlalchemy.engine.base.Engine Row (42, ) 42 2014-08-18 10:17:28,389 INFO sqlalchemy.engine.base.Engine SELECT [TABLES_1].[TABLE_NAME] FROM [INFORMATION_SCHEMA].[TABLES] AS [TABLES_1] WHERE [TABLES_1].[TABLE_SCHEMA] = CAST(? AS NVARCHAR(max)) AND [TABLES_1].[TABLE_TYPE] = ? ORDER BY [TABLES_1].[TABLE_NAME] 2014-08-18 10:17:28,389 INFO sqlalchemy.engine.base.Engine (u'dbo', 'BASE TABLE') 2014-08-18 10:17:28,394 DEBUG sqlalchemy.engine.base.Engine Col ('TABLE_NAME',) A Not quite sure how to parse this? For example, is u'dbo' what is being used as the schema? Greg-- On Monday, August 18, 2014 10:05:09 AM UTC-5, Simon King wrote: On Mon, Aug 18, 2014 at 3:47 PM, Horcle g...@umn.edu wrote: On Friday, August 15, 2014 8:28:41 PM UTC-5, Michael Bayer wrote: On Aug 15, 2014, at 5:03 PM, Greg Silverman g...@umn.edu wrote: Then, I thought, what if this is an SQLAlchemy issue.
Re: [sqlalchemy] cannot access tables
try the query as stated along with a pyodbc connection (e.g. conn = pyodbc.connect(...); cursor = conn.cursor(); cursor.execute(the statement); cursor.fetchall()). the way pyodbc is connecting might be changing things. On Aug 18, 2014, at 12:59 PM, Horcle g...@umn.edu wrote: Thanks for the heads up. Unfortunately, it did not help. In any case, the issue appears to be that while the last query DOES return a record set when run as straight up SQL on the server, it does not work as desirecd through SQLAlchemy. More digging to be done. Greg-- On Monday, August 18, 2014 11:30:39 AM UTC-5, Simon King wrote: It looks like the code that runs the SELECT default_schema_name query has changed since the version you are running: https://bitbucket.org/zzzeek/sqlalchemy/commits/1fb4ad75a38c It might be worth upgrading to the latest release. Simon On Mon, Aug 18, 2014 at 5:22 PM, Horcle g...@umn.edu wrote: Thanks, this does help. I was wondering why the return results had no values given. Greg-- On Monday, August 18, 2014 11:17:48 AM UTC-5, Simon King wrote: I think you are seeing, for each query: 1. The query itself 2. The parameters being passed in to the query 3. The names of the columns being returned 4. The returned rows, if any. So for example, the first thing that happens is: SELECT user_name() with no parameters () returning a result set containing a single column with no name: ('',) followed by a single row containing a single value, the unicode string dbo: (u'dbo', ) The second query goes like this: SELECT default_schema_name FROM sys.database_principals WHERE name = ? AND type = 'S' Note the bound parameter (name = ?). The next line tells us that SA is sending the unicode string dbo for that parameter: (u'dbo',) The result set has a single column called 'default_schema_name': ('default_schema_name',) ...but there are no matching rows. Then a bit further along, SA is running this query: SELECT [TABLES_1].[TABLE_NAME] FROM [INFORMATION_SCHEMA].[TABLES] AS [TABLES_1] WHERE [TABLES_1].[TABLE_SCHEMA] = CAST(? AS NVARCHAR(max)) AND [TABLES_1].[TABLE_TYPE] = ? ORDER BY [TABLES_1].[TABLE_NAME] ...passing the parameters dbo and BASE TABLE, but not getting any results back. I don't know anything about MS-SQL so can't tell you why that is, but perhaps you've got enough information to carry on digging? Hope that helps, Simon On Mon, Aug 18, 2014 at 4:27 PM, Horcle g...@umn.edu wrote: Indeed! Here is the output: gms$ python test_connect.py 2014-08-18 10:17:28,095 INFO sqlalchemy.engine.base.Engine SELECT user_name() 2014-08-18 10:17:28,095 INFO sqlalchemy.engine.base.Engine () 2014-08-18 10:17:28,097 DEBUG sqlalchemy.engine.base.Engine Col ('',) 2014-08-18 10:17:28,098 DEBUG sqlalchemy.engine.base.Engine Row (u'dbo', ) 2014-08-18 10:17:28,099 INFO sqlalchemy.engine.base.Engine SELECT default_schema_name FROM sys.database_principals WHERE name = ? AND type = 'S' 2014-08-18 10:17:28,099 INFO sqlalchemy.engine.base.Engine (u'dbo',) 2014-08-18 10:17:28,101 DEBUG sqlalchemy.engine.base.Engine Col ('default_schema_name',) 2014-08-18 10:17:28,103 INFO sqlalchemy.engine.base.Engine SELECT CAST('test plain returns' AS VARCHAR(60)) AS anon_1 2014-08-18 10:17:28,103 INFO sqlalchemy.engine.base.Engine () 2014-08-18 10:17:28,106 INFO sqlalchemy.engine.base.Engine SELECT CAST('test unicode returns' AS NVARCHAR(60)) AS anon_1 2014-08-18 10:17:28,106 INFO sqlalchemy.engine.base.Engine () sqlalchemy.engine.base.Connection object at 0x101839490 2014-08-18 10:17:28,382 INFO sqlalchemy.engine.base.Engine select 6 * 7 as [Result]; 2014-08-18 10:17:28,382 INFO sqlalchemy.engine.base.Engine () 2014-08-18 10:17:28,384 DEBUG sqlalchemy.engine.base.Engine Col ('Result',) 2014-08-18 10:17:28,384 DEBUG sqlalchemy.engine.base.Engine Row (42, ) 42 2014-08-18 10:17:28,389 INFO sqlalchemy.engine.base.Engine SELECT [TABLES_1].[TABLE_NAME] FROM [INFORMATION_SCHEMA].[TABLES] AS [TABLES_1] WHERE [TABLES_1].[TABLE_SCHEMA] = CAST(? AS NVARCHAR(max)) AND [TABLES_1].[TABLE_TYPE] = ? ORDER BY [TABLES_1].[TABLE_NAME] 2014-08-18 10:17:28,389 INFO sqlalchemy.engine.base.Engine (u'dbo', 'BASE TABLE') 2014-08-18 10:17:28,394 DEBUG sqlalchemy.engine.base.Engine Col ('TABLE_NAME',) A Not quite sure how to parse this? For example, is u'dbo' what is being used as the schema? Greg-- On Monday, August 18, 2014 10:05:09 AM UTC-5, Simon King wrote: On Mon,
Re: [sqlalchemy] cannot access tables
It ended up being a unicode issue. I had to set this: supports_unicode_binds=False (see Unicde Binds here http://docs.sqlalchemy.org/en/rel_0_9/dialects/mssql.html#module-sqlalchemy.dialects.mssql.pyodbc), in order to get it to work. Annoying, to say the least! python test_connect.py 2014-08-18 16:15:06,611 INFO sqlalchemy.engine.base.Engine SELECT default_schema_name FROM sys.database_principals WHERE principal_id=database_principal_id() 2014-08-18 16:15:06,611 INFO sqlalchemy.engine.base.Engine () 2014-08-18 16:15:06,613 DEBUG sqlalchemy.engine.base.Engine Col ('default_schema_name',) 2014-08-18 16:15:06,614 DEBUG sqlalchemy.engine.base.Engine Row (u'dbo', ) 2014-08-18 16:15:06,616 INFO sqlalchemy.engine.base.Engine SELECT CAST('test plain returns' AS VARCHAR(60)) AS anon_1 2014-08-18 16:15:06,616 INFO sqlalchemy.engine.base.Engine () 2014-08-18 16:15:06,619 INFO sqlalchemy.engine.base.Engine SELECT CAST('test unicode returns' AS NVARCHAR(60)) AS anon_1 2014-08-18 16:15:06,619 INFO sqlalchemy.engine.base.Engine () sqlalchemy.engine.base.Connection object at 0x101877ed0 2014-08-18 16:15:06,639 INFO sqlalchemy.engine.base.Engine select 6 * 7 as [Result]; 2014-08-18 16:15:06,639 INFO sqlalchemy.engine.base.Engine () 2014-08-18 16:15:06,641 DEBUG sqlalchemy.engine.base.Engine Col ('Result',) 2014-08-18 16:15:06,641 DEBUG sqlalchemy.engine.base.Engine Row (42, ) 42 2014-08-18 16:15:06,647 INFO sqlalchemy.engine.base.Engine SELECT [TABLES_1].[TABLE_NAME] FROM [INFORMATION_SCHEMA].[TABLES] AS [TABLES_1] WHERE [TABLES_1].[TABLE_SCHEMA] = CAST(? AS NVARCHAR(max)) AND [TABLES_1].[TABLE_TYPE] = ? ORDER BY [TABLES_1].[TABLE_NAME] 2014-08-18 16:15:06,647 INFO sqlalchemy.engine.base.Engine ('dbo', 'BASE TABLE') 2014-08-18 16:15:06,663 DEBUG sqlalchemy.engine.base.Engine Col ('TABLE_NAME',) 2014-08-18 16:15:06,663 DEBUG sqlalchemy.engine.base.Engine Row (u'irb_desc', ) 2014-08-18 16:15:06,663 DEBUG sqlalchemy.engine.base.Engine Row (u'irbd', ) 2014-08-18 16:15:06,663 DEBUG sqlalchemy.engine.base.Engine Row (u'study_desc', ) 2014-08-18 16:15:06,664 DEBUG sqlalchemy.engine.base.Engine Row (u'study_irb', ) 2014-08-18 16:15:06,664 DEBUG sqlalchemy.engine.base.Engine Row (u'study_status', ) 2014-08-18 16:15:06,664 DEBUG sqlalchemy.engine.base.Engine Row (u'study_status_desc', ) 2014-08-18 16:15:06,664 DEBUG sqlalchemy.engine.base.Engine Row (u'study_subject', ) 2014-08-18 16:15:06,664 DEBUG sqlalchemy.engine.base.Engine Row (u'subj_desc', ) 2014-08-18 16:15:06,664 DEBUG sqlalchemy.engine.base.Engine Row (u'subj_status_desc', ) 2014-08-18 16:15:06,665 DEBUG sqlalchemy.engine.base.Engine Row (u'subject_status', ) 2014-08-18 16:15:06,665 DEBUG sqlalchemy.engine.base.Engine Row (u'sysdiagrams', ) Thanks all! Greg-- On Monday, August 18, 2014 1:08:55 PM UTC-5, Michael Bayer wrote: try the query as stated along with a pyodbc connection (e.g. conn = pyodbc.connect(…); cursor = conn.cursor(); cursor.execute(the statement); cursor.fetchall()). the way pyodbc is connecting might be changing things. On Aug 18, 2014, at 12:59 PM, Horcle g...@umn.edu javascript: wrote: Thanks for the heads up. Unfortunately, it did not help. In any case, the issue appears to be that while the last query DOES return a record set when run as straight up SQL on the server, it does not work as desirecd through SQLAlchemy. More digging to be done. Greg-- On Monday, August 18, 2014 11:30:39 AM UTC-5, Simon King wrote: It looks like the code that runs the SELECT default_schema_name query has changed since the version you are running: https://bitbucket.org/zzzeek/sqlalchemy/commits/1fb4ad75a38c It might be worth upgrading to the latest release. Simon On Mon, Aug 18, 2014 at 5:22 PM, Horcle g...@umn.edu wrote: Thanks, this does help. I was wondering why the return results had no values given. Greg-- On Monday, August 18, 2014 11:17:48 AM UTC-5, Simon King wrote: I think you are seeing, for each query: 1. The query itself 2. The parameters being passed in to the query 3. The names of the columns being returned 4. The returned rows, if any. So for example, the first thing that happens is: SELECT user_name() with no parameters () returning a result set containing a single column with no name: ('',) followed by a single row containing a single value, the unicode string dbo: (u'dbo', ) The second query goes like this: SELECT default_schema_name FROM sys.database_principals WHERE name = ? AND type = 'S' Note the bound parameter (name = ?). The next line tells us that SA is sending the unicode string dbo for that parameter: (u'dbo',) The result set has a single column called 'default_schema_name': ('default_schema_name',) ...but there are
Re: [sqlalchemy] cannot access tables
On Aug 15, 2014, at 5:03 PM, Greg Silverman g...@umn.edu wrote: Then, I thought, what if this is an SQLAlchemy issue. Looks to be. I ran the following script as a test: import pyodbc import sqlalchemy from sqlalchemy.engine import reflection from sqlalchemy.engine.reflection import Inspector def connect(): return pyodbc.connect( 'DRIVER={FreeTDS};SERVER=ip_address;' 'DATABASE=db_name;UID=test;PWD=test;port=1433;' 'TDS_Version=9.1;') engine = sqlalchemy.create_engine('mssql://', creator=connect) conn = engine.connect() print conn for row in engine.execute('select 6 * 7 as [Result];'): print row.Result insp = reflection.Inspector.from_engine(engine) table_name = 'irb_desc' table_names = insp.get_table_names() if table_name not in table_names: print 'A' Again, I am connecting fine with the database create.engine method (that is '42' is printing as expected), but when I run the inspector.get_table_names method with the given conditional it is printing the 'A' (I have tried other table names in the same database to which I added 'irbd_balance,' all with the same result. what is the SQL output if you set echo='debug'; then, take the SQL you see and take a look at what it's SELECTing so you can see what might be wrong. Probably some schema name setting or something like that. -- 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.