вторник, 6 июня 2017 г., 19:46:43 UTC+3 пользователь Mike Bayer написал:
>
>
>
> On 06/06/2017 11:14 AM, Антонио Антуан wrote: 
> > Hi. 
> > I want to generate query without tablename as columns prefix. How can I 
> > do this? 
> > For example, query /Session.query(table.id).filter(table.time > 
> > func.now())/ compiles to /SELECT table.id FROM table WHERE table.time > 
> > now(). /I want to get /SELECT id FROM table WHERE time > now(). / 
> > / 
> > / 
> > I want it, because ClickHouse has its own syntax, and in some cases it 
> > is far from SQL standards. 
> > Here is my model and query, they as same as my real model and real 
> query: 
> > 
> > | 
> > fromsqlalchemy importcoalesce,case,func, Column 
> > from clickhouse_sqlalchemy import types, engines 
>
>
> what is "clickhouse_sqlalchemy" ?  Are you writing a custom dialect for 
> a database called "clickhouse"? 


> if so, then you'd want to customize how the column name is generated in 
> the visit_column() method in your compiler.  Make sure the 
> "include_table" keyword argument is False: 
>
>  
No, that is not my library, but now I see what was wrong :)
Thanks for your help.
 

> class MyClickhouseCompiler(SQLCompiler): 
>      def visit_column(self, *arg, **kw): 
>          kw['include_table'] = False 
>          super(MyClickhouseCompiler, self).visit_column(*arg, **kw) 
>
>
>
>
> > 
> > from project import Base 
> > 
> > class Model(Base): 
> >      __table__ = 'analytics' 
> > 
> >      ts_spawn = Column(types.UInt32, primary_key=True) 
> >           entity_id = Column(types.UInt32) 
> >           condition = Column(types.UInt32) 
> > 
> >           clicks = Column(types.UInt32) 
> > 
> > 
> Session.query(Model.entity_id.label('group_by'),coalesce(func.sum(case([(Model.condition
>  
>
> >  >0,Model.clicks)],else_=0)).label('clicks')).group_by(Model.entity_id) 
> > 
> > | 
> > 
> > Logs: 
> > 
> > | 
> > 2017-06-06 18:09:04,270 INFO sqlalchemy.engine.base.Engine BEGIN 
> (implicit) 
> > 2017-06-06 18:09:04,270 | sqlalchemy.engine.base.Engine | info:109 | 
> > INFO | BEGIN (implicit) 
> > 2017-06-06 18:09:04,274 INFO sqlalchemy.engine.base.Engine SELECT 
> > analytics.entity_id AS group_by, coalesce(sum(CASE WHEN 
> > (analytics.condition > 0) THEN analytics.clicks ELSE 0 END), 0) AS 
> clicks 
> > FROM analytics 
> > GROUP BY analytics.entity_id FORMAT TabSeparatedWithNamesAndTypes 
> > 2017-06-06 18:09:04,274 | sqlalchemy.engine.base.Engine | info:109 | 
> > INFO | SELECT analytics.entity_id AS group_by, coalesce(sum(CASE WHEN 
> > (analytics.condition > 0) THEN analytics.clicks ELSE 0 END), 0) AS 
> clicks 
> > FROM analytics 
> > GROUP BY analytics.entity_id FORMAT TabSeparatedWithNamesAndTypes 
> > 2017-06-06 18:09:04,276 INFO sqlalchemy.engine.base.Engine {} 
> > 2017-06-06 18:09:04,276 | sqlalchemy.engine.base.Engine | info:109 | 
> > INFO | {} 
> > Traceback (most recent call last): 
> >    File "/opt/pycharm-professional/helpers/pydev/pydevd.py", line 1585, 
> > in <module> 
> >      globals = debugger.run(setup['file'], None, None, is_module) 
> >    File "/opt/pycharm-professional/helpers/pydev/pydevd.py", line 1015, 
> > in run 
> >      pydev_imports.execfile(file, globals, locals)  # execute the script 
> >    File "/home/anton/Projects/project/core/project/core/run/stuff.py", 
> > line 10, in <module> 
> >      print Statistics(Statistics.groups.entity_id, 0, int(time.time()), 
> > Statistics.columns.clicks).total 
> >    File 
> > "/home/anton/Projects/project/core/project/core/util/stat/stat.py", line 
> > 612, in total 
> >      self.get_data() 
> >    File 
> > "/home/anton/Projects/project/core/project/core/util/stat/stat.py", line 
> > 452, in get_data 
> >      self.calculate() 
> >    File 
> > "/home/anton/Projects/project/core/project/core/util/stat/stat.py", line 
> > 512, in calculate 
> >      self._get_raw_data() 
> >    File 
> > "/home/anton/Projects/project/core/project/core/util/stat/stat.py", line 
> > 798, in _get_raw_data 
> >      for row in query.session.execute(compiled_query): 
> >    File "build/bdist.linux-x86_64/egg/sqlalchemy/orm/session.py", line 
> > 1097, in execute 
> >    File "build/bdist.linux-x86_64/egg/sqlalchemy/engine/base.py", line 
> > 914, in execute 
> >    File "build/bdist.linux-x86_64/egg/sqlalchemy/sql/elements.py", line 
> > 323, in _execute_on_connection 
> >    File "build/bdist.linux-x86_64/egg/sqlalchemy/engine/base.py", line 
> > 1010, in _execute_clauseelement 
> >    File "build/bdist.linux-x86_64/egg/sqlalchemy/engine/base.py", line 
> > 1146, in _execute_context 
> >    File "build/bdist.linux-x86_64/egg/sqlalchemy/engine/base.py", line 
> > 1344, in _handle_dbapi_exception 
> >    File "build/bdist.linux-x86_64/egg/sqlalchemy/engine/base.py", line 
> > 1139, in _execute_context 
> >    File "build/bdist.linux-x86_64/egg/sqlalchemy/engine/default.py", 
> > line 450, in do_execute 
> >    File 
> > 
> "/home/anton/Projects/project/.venv/lib/python2.7/site-packages/clickhouse_sqlalchemy/connector.py",
>  
>
> > line 98, in execute 
> >      self._process_response(response_gen) 
> >    File 
> > 
> "/home/anton/Projects/project/.venv/lib/python2.7/site-packages/clickhouse_sqlalchemy/connector.py",
>  
>
> > line 185, in _process_response 
> >      self._columns = next(response, None) 
> >    File 
> > 
> "/home/anton/Projects/project/.venv/lib/python2.7/site-packages/clickhouse_sqlalchemy/transport.py",
>  
>
> > line 36, in execute 
> >      r = self._send(query, params=params, stream=True) 
> >    File 
> > 
> "/home/anton/Projects/project/.venv/lib/python2.7/site-packages/clickhouse_sqlalchemy/transport.py",
>  
>
> > line 66, in _send 
> >      raise DatabaseException(r.text) 
> > clickhouse_sqlalchemy.exceptions.DatabaseException: Code: 47, 
> > e.displayText() = DB::Exception: Unknown identifier: 
> > analytics.condition, e.what() = DB::Exception 
> > | 
> > 
> > And that query works normally: 
> > 
> > SELECT entity_id AS group_by, coalesce(sum(CASE WHEN (condition > 0) 
> > THEN clicks ELSE 0 END), 0) AS clicks 
> > FROM analytics 
> > GROUP BY entity_id 
> > 
> > -- 
> > SQLAlchemy - 
> > The Python SQL Toolkit and Object Relational Mapper 
> > 
> > http://www.sqlalchemy.org/ 
> > 
> > To post example code, please provide an MCVE: Minimal, Complete, and 
> > Verifiable Example. See http://stackoverflow.com/help/mcve for a full 
> > description. 
> > --- 
> > You received this message because you are subscribed to the Google 
> > Groups "sqlalchemy" group. 
> > To unsubscribe from this group and stop receiving emails from it, send 
> > an email to sqlalchemy+...@googlegroups.com <javascript:> 
> > <mailto:sqlalchemy+unsubscr...@googlegroups.com <javascript:>>. 
> > To post to this group, send email to sqlal...@googlegroups.com 
> <javascript:> 
> > <mailto:sqlal...@googlegroups.com <javascript:>>. 
> > Visit this group at https://groups.google.com/group/sqlalchemy. 
> > For more options, visit https://groups.google.com/d/optout. 
>

-- 
SQLAlchemy - 
The Python SQL Toolkit and Object Relational Mapper

http://www.sqlalchemy.org/

To post example code, please provide an MCVE: Minimal, Complete, and Verifiable 
Example.  See  http://stackoverflow.com/help/mcve for a full description.
--- 
You received this message because you are subscribed to the Google Groups 
"sqlalchemy" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to sqlalchemy+unsubscr...@googlegroups.com.
To post to this group, send email to sqlalchemy@googlegroups.com.
Visit this group at https://groups.google.com/group/sqlalchemy.
For more options, visit https://groups.google.com/d/optout.

Reply via email to