Я пытаюсь использовать sqlalchemy
с QuickBooks, используя драйвер qodbc
, и имею проблему с диалектом и схемой.
Вот скрипт, который показывает проблему:
from sqlalchemy import create_engine, MetaData, Table
def main():
engine = create_engine("mssql+pyodbc://QuickBooks Data", echo=True)
try:
engine.connect() # errors at "SELECT schema_name()" on connection
except Exception:
pass
meta = MetaData()
customer = Table('customer', meta, autoload=True, autoload_with=engine)
if __name__ == "__main__":
main()
Если я поймаю первое исключение во время engine.connect()
и попытаюсь отразить таблицу Customer, я получу еще одну ошибку, AttributeError: 'MSDialect_pyodbc' object has no attribute 'default_schema_name'
(полный возврат ниже).
Запрос с использованием engine.execute()
работает нормально,до тех пор, пока я игнорирую исключение engine.connect()
.
Есть ли способ редактирования диалекта для добавления схемы по умолчанию или способ передачи ее в SQLAlchemy?И если да, что это должно быть для QODBC?
Traceback (most recent call last):
File "C:/Users/jamie/PycharmProjects/cubey/cubey/scratch.py", line 15, in <module>
main()
File "C:/Users/jamie/PycharmProjects/cubey/cubey/scratch.py", line 11, in main
customer = Table('customer', meta, autoload=True, autoload_with=engine)
File "C:\Users\jamie\Miniconda3\envs\cubey\lib\site-packages\sqlalchemy\sql\schema.py", line 457, in __new__
metadata._remove_table(name, schema)
File "C:\Users\jamie\Miniconda3\envs\cubey\lib\site-packages\sqlalchemy\util\langhelpers.py", line 66, in __exit__
compat.reraise(exc_type, exc_value, exc_tb)
File "C:\Users\jamie\Miniconda3\envs\cubey\lib\site-packages\sqlalchemy\util\compat.py", line 249, in reraise
raise value
File "C:\Users\jamie\Miniconda3\envs\cubey\lib\site-packages\sqlalchemy\sql\schema.py", line 452, in __new__
table._init(name, metadata, *args, **kw)
File "C:\Users\jamie\Miniconda3\envs\cubey\lib\site-packages\sqlalchemy\sql\schema.py", line 534, in _init
include_columns, _extend_on=_extend_on)
File "C:\Users\jamie\Miniconda3\envs\cubey\lib\site-packages\sqlalchemy\sql\schema.py", line 547, in _autoload
_extend_on=_extend_on
File "C:\Users\jamie\Miniconda3\envs\cubey\lib\site-packages\sqlalchemy\engine\base.py", line 2056, in run_callable
return conn.run_callable(callable_, *args, **kwargs)
File "C:\Users\jamie\Miniconda3\envs\cubey\lib\site-packages\sqlalchemy\engine\base.py", line 1545, in run_callable
return callable_(self, *args, **kwargs)
File "C:\Users\jamie\Miniconda3\envs\cubey\lib\site-packages\sqlalchemy\engine\default.py", line 391, in reflecttable
table, include_columns, exclude_columns, **opts)
File "C:\Users\jamie\Miniconda3\envs\cubey\lib\site-packages\sqlalchemy\engine\reflection.py", line 618, in reflecttable
table_name, schema, **table.dialect_kwargs):
File "C:\Users\jamie\Miniconda3\envs\cubey\lib\site-packages\sqlalchemy\engine\reflection.py", line 369, in get_columns
**kw)
File "<string>", line 2, in get_columns
File "C:\Users\jamie\Miniconda3\envs\cubey\lib\site-packages\sqlalchemy\engine\reflection.py", line 54, in cache
ret = fn(self, con, *args, **kw)
File "C:\Users\jamie\Miniconda3\envs\cubey\lib\site-packages\sqlalchemy\dialects\mssql\base.py", line 1747, in wrap
dbname, owner = _owner_plus_db(dialect, schema)
File "C:\Users\jamie\Miniconda3\envs\cubey\lib\site-packages\sqlalchemy\dialects\mssql\base.py", line 1766, in _owner_plus_db
return None, dialect.default_schema_name
AttributeError: 'MSDialect_pyodbc' object has no attribute 'default_schema_name'