I am attempting to use SQLAlchemy's table reflection to access a MSSQL
2k database. However the user I can connect with only had
db_datareader access. When SQLAlchemy tries to load the schema, it
attempts a rollback at the end, which the user does not have
permission to execute:
2007-08-29 11:32:24,400 INFO sqlalchemy.engine.base.Engine.0x..cL SET
nocount ON
2007-08-29 11:32:24,400 INFO sqlalchemy.engine.base.Engine.0x..cL None
2007-08-29 11:32:24,416 INFO sqlalchemy.engine.base.Engine.0x..cL
SELECT [COLUMNS_50b4].[TABLE_SCHEMA], [COLUMNS_50b4].[TABLE_NAME],
[COLUMNS_50b4].[COLUMN_NAME], [COLUMNS_50b4].[IS_NULLABLE],
[COLUMNS_50b4].[DATA_TYPE], [COLUMNS_50b4].[ORDINAL_POSITION],
[COLUMNS_50b4].[CHARACTER_MAXIMUM_LENGTH], [COLUMNS_50b4].
[NUMERIC_PRECISION], [COLUMNS_50b4].[NUMERIC_SCALE], [COLUMNS_50b4].
[COLUMN_DEFAULT]
FROM [INFORMATION_SCHEMA].[COLUMNS] AS [COLUMNS_50b4]
WHERE [COLUMNS_50b4].[TABLE_NAME] = ? AND [COLUMNS_50b4].
[TABLE_SCHEMA] = ? ORDER BY [COLUMNS_50b4].[ORDINAL_POSITION]
2007-08-29 11:32:24,416 INFO sqlalchemy.engine.base.Engine.0x..cL
['Table', 'dbo']
2007-08-29 11:32:24,416 INFO sqlalchemy.engine.base.Engine.0x..cL
ROLLBACK
Traceback (most recent call last):
File stdin, line 1, in module
File /home/jkoelker/lib/python2.5/site-packages/Elixir-0.3.0-
py2.5.egg/elixir/entity.py, line 317, in __init__
desc.setup()
File /home/jkoelker/lib/python2.5/site-packages/Elixir-0.3.0-
py2.5.egg/elixir/entity.py, line 110, in setup
self.setup_table()
File /home/jkoelker/lib/python2.5/site-packages/Elixir-0.3.0-
py2.5.egg/elixir/entity.py, line 221, in setup_table
*args, **kwargs)
File /home/jkoelker/lib/python2.5/site-packages/SQLAlchemy-0.3.10-
py2.5.egg/sqlalchemy/schema.py, line 175, in __call__
metadata._get_engine(raiseerr=True).reflecttable(table)
File /home/jkoelker/lib/python2.5/site-packages/SQLAlchemy-0.3.10-
py2.5.egg/sqlalchemy/engine/base.py, line 806, in reflecttable
self.dialect.reflecttable(conn, table)
File /home/jkoelker/lib/python2.5/site-packages/SQLAlchemy-0.3.10-
py2.5.egg/sqlalchemy/databases/mssql.py, line 495, in reflecttable
c = connection.execute(s)
File /home/jkoelker/lib/python2.5/site-packages/SQLAlchemy-0.3.10-
py2.5.egg/sqlalchemy/engine/base.py, line 517, in execute
return Connection.executors[c](self, object, *multiparams,
**params)
File /home/jkoelker/lib/python2.5/site-packages/SQLAlchemy-0.3.10-
py2.5.egg/sqlalchemy/engine/base.py, line 557, in
execute_clauseelement
return self.execute_compiled(elem.compile(dialect=self.dialect,
parameters=param), *multiparams, **params)
File /home/jkoelker/lib/python2.5/site-packages/SQLAlchemy-0.3.10-
py2.5.egg/sqlalchemy/engine/base.py, line 568, in execute_compiled
self._execute_raw(context)
File /home/jkoelker/lib/python2.5/site-packages/SQLAlchemy-0.3.10-
py2.5.egg/sqlalchemy/engine/base.py, line 581, in _execute_raw
self._execute(context)
File /home/jkoelker/lib/python2.5/site-packages/SQLAlchemy-0.3.10-
py2.5.egg/sqlalchemy/engine/base.py, line 596, in _execute
self._autorollback()
File /home/jkoelker/lib/python2.5/site-packages/SQLAlchemy-0.3.10-
py2.5.egg/sqlalchemy/engine/base.py, line 497, in _autorollback
self._rollback_impl()
File /home/jkoelker/lib/python2.5/site-packages/SQLAlchemy-0.3.10-
py2.5.egg/sqlalchemy/engine/base.py, line 475, in _rollback_impl
raise exceptions.SQLError(None, None, e)
sqlalchemy.exceptions.SQLError: (Error) ('HY000', '[HY000] [FreeTDS]
[SQL Server]Could not perform COMMIT or ROLLBACK (0)') None None
Is there any way to use reflection with a read only connection?
Happy Hacking!
7-11
--~--~-~--~~~---~--~~
You received this message because you are subscribed to the Google Groups
sqlalchemy group.
To post to this group, send email to sqlalchemy@googlegroups.com
To unsubscribe from this group, send email to [EMAIL PROTECTED]
For more options, visit this group at
http://groups.google.com/group/sqlalchemy?hl=en
-~--~~~~--~~--~--~---