cloudflare / cloudflare/sqlalchemy-clickhouse

add autocreate argument to

Open
#19 1 comment 0 reactions 0 assignees View on GitHub
Dominant language
Python
Stars
325
Forks
101
PR merge metrics
No merged PRs in 30d

Description

I have read-only access to ClickHouse DB
When I try to execute any query, I got this error

```
Traceback (most recent call last):
File "/usr/local/lib/python3.5/dist-packages/tornado/web.py", line 1509, in _execute
result = method(*self.path_args, **self.path_kwargs)
File "/home/vsmelov/PycharmProjects/kpi_service/api/handlers/kpi_calc.py", line 25, in post
result = get_all_kpi(request)
File "/home/vsmelov/PycharmProjects/kpi_service/api/kpi_calc/get_all_kpi.py", line 47, in get_all_kpi
kpi_response = calcer(_one_kpi_request) # calculate kpi result
File "/home/vsmelov/PycharmProjects/kpi_service/api/kpi_calc/base_kpi.py", line 171, in __call__
db_response = self.grouped_with_target(request, target_nothing=True)
File "/home/vsmelov/PycharmProjects/kpi_service/api/kpi_calc/base_kpi.py", line 119, in grouped_with_target
raw_response = self.get_grouped_data(request, filter_query, target_nothing=True)
File "/home/vsmelov/PycharmProjects/kpi_service/api/kpi_calc/base_kpi.py", line 73, in get_grouped_data
db_response = [obj._asdict() for obj in grouped.all()]
File "/usr/local/lib/python3.5/dist-packages/sqlalchemy/orm/query.py", line 2703, in all
return list(self)
File "/usr/local/lib/python3.5/dist-packages/sqlalchemy/orm/query.py", line 2855, in __iter__
return self._execute_and_instances(context)
File "/usr/local/lib/python3.5/dist-packages/sqlalchemy/orm/query.py", line 2876, in _execute_and_instances
close_with_result=True)
File "/usr/local/lib/python3.5/dist-packages/sqlalchemy/orm/query.py", line 2885, in _get_bind_args
**kw
File "/usr/local/lib/python3.5/dist-packages/sqlalchemy/orm/query.py", line 2867, in _connection_from_session
conn = self.session.connection(**kw)
File "/usr/local/lib/python3.5/dist-packages/sqlalchemy/orm/session.py", line 1013, in connection
execution_options=execution_options)
File "/usr/local/lib/python3.5/dist-packages/sqlalchemy/orm/session.py", line 1018, in _connection_for_bind
engine, execution_options)
File "/usr/local/lib/python3.5/dist-packages/sqlalchemy/orm/session.py", line 403, in _connection_for_bind
conn = bind.contextual_connect()
File "/usr/local/lib/python3.5/dist-packages/sqlalchemy/engine/base.py", line 2112, in contextual_connect
self._wrap_pool_connect(self.pool.connect, None),
File "/usr/local/lib/python3.5/dist-packages/sqlalchemy/engine/base.py", line 2147, in _wrap_pool_connect
return fn()
File "/usr/local/lib/python3.5/dist-packages/sqlalchemy/pool.py", line 387, in connect
return _ConnectionFairy._checkout(self)
File "/usr/local/lib/python3.5/dist-packages/sqlalchemy/pool.py", line 766, in _checkout
fairy = _ConnectionRecord.checkout(pool)
File "/usr/local/lib/python3.5/dist-packages/sqlalchemy/pool.py", line 516, in checkout
rec = pool._do_get()
File "/usr/local/lib/python3.5/dist-packages/sqlalchemy/pool.py", line 1138, in _do_get
self._dec_overflow()
File "/usr/local/lib/python3.5/dist-packages/sqlalchemy/util/langhelpers.py", line 66, in __exit__
compat.reraise(exc_type, exc_value, exc_tb)
File "/usr/local/lib/python3.5/dist-packages/sqlalchemy/util/compat.py", line 187, in reraise
raise value
File "/usr/local/lib/python3.5/dist-packages/sqlalchemy/pool.py", line 1135, in _do_get
return self._create_connection()
File "/usr/local/lib/python3.5/dist-packages/sqlalchemy/pool.py", line 333, in _create_connection
return _ConnectionRecord(self)
File "/usr/local/lib/python3.5/dist-packages/sqlalchemy/pool.py", line 461, in __init__
self.__connect(first_connect_check=True)
File "/usr/local/lib/python3.5/dist-packages/sqlalchemy/pool.py", line 651, in __connect
connection = pool._invoke_creator(self)
File "/usr/local/lib/python3.5/dist-packages/sqlalchemy/engine/strategies.py", line 105, in connect
return dialect.connect(*cargs, **cparams)
File "/usr/local/lib/python3.5/dist-packages/sqlalchemy/engine/default.py", line 393, in connect
return self.dbapi.connect(*cargs, **cparams)
File "/usr/local/lib/python3.5/dist-packages/sqlalchemy_clickhouse/connector.py", line 102, in connect
return Connection(*args, **kwargs)
File "/usr/local/lib/python3.5/dist-packages/sqlalchemy_clickhouse/connector.py", line 109, in __init__
super(Connection, self).__init__(db_name, db_url, username, password)
File "/usr/local/lib/python3.5/dist-packages/infi/clickhouse_orm/database.py", line 55, in __init__
self.create_database()
File "/usr/local/lib/python3.5/dist-packages/infi/clickhouse_orm/database.py", line 62, in create_database
self._send('CREATE DATABASE IF NOT EXISTS `%s`' % self.db_name)
File "/usr/local/lib/python3.5/dist-packages/sqlalchemy_clickhouse/connector.py", line 93, in _send
raise Exception(r.text)
Exception: Code: 164, e.displayText() = DB::Exception: Cannot execute query in readonly mode, e.what() = DB::Exception
```

So I would like to get ability to set flag autocommit=False directly to SQLAlchemy create_engine function
like this
`engine = create_engine(DSN_CH, autocreate=False)`

but now, when I try to do it, I got other error:
```
Traceback (most recent call last):
File "/home/vsmelov/PycharmProjects/kpi_service/run.py", line 19, in
from api.handlers.master_data import MasterDataHandler
File "/home/vsmelov/PycharmProjects/kpi_service/api/handlers/master_data.py", line 3, in
from api.models.base_query_mixin import BaseQueryMixin
File "/home/vsmelov/PycharmProjects/kpi_service/api/models/__init__.py", line 5, in
from api.models import magnit
File "/home/vsmelov/PycharmProjects/kpi_service/api/models/magnit/__init__.py", line 3, in
from api.models.magnit.ch import *
File "/home/vsmelov/PycharmProjects/kpi_service/api/models/magnit/ch.py", line 7, in
engine = create_engine(MAGNIT_DSN_CH, autocreate=False)
File "/usr/local/lib/python3.5/dist-packages/sqlalchemy/engine/__init__.py", line 391, in create_engine
return strategy.create(*args, **kwargs)
File "/usr/local/lib/python3.5/dist-packages/sqlalchemy/engine/strategies.py", line 160, in create
engineclass.__name__))
TypeError: Invalid argument(s) 'autocreate' sent to create_engine(), using configuration ClickHouseDialect/QueuePool/Engine. Please check that the keyword arguments are appropriate for this combination of components.
```

So now I forced to ask administrator about write-privilege on DB, but would like to avoid it.

How can I set autocreate=False in SQLAlchemy create_engine now?

Contributor guide

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.