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

Reply via email to