Подключение к QuickBooks с использованием SQLAlchemy? - PullRequest
0 голосов
/ 20 декабря 2018

Я пытаюсь использовать 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'
...