what the heck is FILTER? I am googling for "hdbcli" and not getting a clear signal back, it's not even on pypi, seems to be related to SAP but I can find no source links or anything (there seems to be a competing driver PyHDB that is more open source friendly). This would be an issue with that SQLAlchemy dialect that I am not even able to find on the web, you'd need to ask them.
On Wed, Apr 18, 2018 at 6:34 AM, su-sa <sachdeva.sugandh...@gmail.com> wrote: > > > On Wednesday, 18 April 2018 12:18:51 UTC+2, su-sa wrote: >> >> >> >> Hi everyone, >> >> I've been trying quite a while to reproduce the following query:q2 = text( >> "select top 100 s_acctbal, s_name, n_name, p_partkey, p_mfgr, >> s_address, s_phone, s_comment from system.part, " >> "system.supplier, system.partsupp, system.nation, system.region where >> p_partkey = ps_partkey " >> "and s_suppkey = ps_suppkey and p_size = 15 and p_type like '%BRASS' >> and s_nationkey = n_nationkey " >> "and n_regionkey = r_regionkey and r_name = 'EUROPE' and ps_supplycost >> = (select min(ps_supplycost) " >> "from system.partsupp, system.supplier, system.nation, system.region >> where p_partkey = ps_partkey " >> "and s_suppkey = ps_suppkey and s_nationkey = n_nationkey and >> n_regionkey = r_regionkey and r_name = 'EUROPE')" >> " order by s_acctbal desc, n_name, s_name, p_partkey;") >> >> >> Thats what I have currently: >> >> q2 = session.query(Supplier.s_acctbal, Supplier.s_name, Nation.n_name, >> Part.p_partkey, Part.p_mfgr, >> Supplier.s_address, Supplier.s_phone, >> Supplier.s_comment).filter(Part.p_partkey == Partsupp.ps_partkey, >> Supplier.s_suppkey== Partsupp.ps_suppkey, Part.p_size >> == 15, Part.p_type.like('%BRASS'), >> Supplier.s_nationkey == Nation.n_nationkey, >> Nation.n_regionkey == Region.r_regionkey, >> Region.r_name == 'Europe', Partsupp.ps_supplycost == >> func.min(Partsupp.ps_supplycost).filter(Part.p_partkey == >> Partsupp.ps_partkey, >> Supplier.s_suppkey == Partsupp.ps_suppkey, >> Supplier.s_nationkey == Nation.n_nationkey, >> Nation.n_regionkey == Region.r_regionkey, Region.r_name >> == 'EUROPE')).order_by(Supplier.s_acctbal.desc(), >> Nation.n_name, Part.p_partkey).limit(100) >> >> But I am getting the error: >> >> sqlalchemy.exc.DBAPIError: (hdbcli.dbapi.Error) (257, 'sql syntax error: >> incorrect syntax near "FILTER": line 3 col 301 (at pos 649)') >> [SQL: u'SELECT supplier.s_acctbal AS supplier_s_acctbal, supplier.s_name >> AS supplier_s_name, nation.n_name AS nation_n_name, part.p_partkey AS >> part_p_partkey, part.p_mfgr AS part_p_mfgr, >> supplier.s_address AS supplier_s_address, supplier.s_phone AS >> supplier_s_phone, supplier.s_comment AS supplier_s_comment \nFROM supplier, >> nation, part, partsupp, region \nWHERE part.p_partkey = partsupp.ps_partkey >> AND supplier.s_suppkey = partsupp.ps_suppkey AND part.p_size = ? AND >> part.p_type LIKE ? AND supplier.s_nationkey = nation.n_nationkey AND >> nation.n_regionkey = region.r_regionkey AND region.r_name = ? AND >> partsupp.ps_supplycost = min(partsupp.ps_supplycost) FILTER (WHERE >> part.p_partkey = partsupp.ps_partkey AND supplier.s_suppkey = >> partsupp.ps_suppkey AND supplier.s_nationkey = nation.n_nationkey AND >> nation.n_regionkey = region.r_regionkey AND region.r_name = ?) ORDER BY >> supplier.s_acctbal DESC, nation.n_name, part.p_partkey\n LIMIT ?'] >> [parameters: (15, '%BRASS', 'Europe', 'EUROPE', 100)] >> (Background on this error at: http://sqlalche.me/e/dbapi) >> >> >> Which makes sense because inside the generated SQL Query, also the word >> filter is present which is not recognised and because the nested select >> statement is not generated. >> >> Could anyone of you tell me what I doing wrong? >> >> >> Sorry if that seems to be a stupid question. >> >> Greetings, >> Sugandha > > > > I also did the following: > > q2 = session.query(Supplier.s_acctbal, Supplier.s_name, Nation.n_name, > Part.p_partkey, Part.p_mfgr, > Supplier.s_address, Supplier.s_phone, > Supplier.s_comment).filter(Part.p_partkey == Partsupp.ps_partkey, > Supplier.s_suppkey== Partsupp.ps_suppkey, Part.p_size == > 15, Part.p_type.like('%BRASS'), > Supplier.s_nationkey == Nation.n_nationkey, > Nation.n_regionkey == Region.r_regionkey, > Region.r_name == 'Europe', Partsupp.ps_supplycost == > session.query(func.min(Partsupp.ps_supplycost)).filter(Part.p_partkey == > Partsupp.ps_partkey, > Supplier.s_suppkey == Partsupp.ps_suppkey, > Supplier.s_nationkey == Nation.n_nationkey, > Nation.n_regionkey == Region.r_regionkey, Region.r_name > == 'EUROPE').correlate(Partsupp, Supplier, Nation, > Region)).order_by(Supplier.s_acctbal.desc(), > Nation.n_name, Part.p_partkey).limit(100) > > But this gives me a new error: > > The column 'SUPPLIER.S_ACCTBAL' is invalid in the ORDER BY clause because > the GROUP BY clause or an aggregation function does not contain it. > > -- > 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. -- 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.