def generate_rst(modules_fn, types_fn): from preql import Preql p = Preql() with open(types_fn, 'w', encoding='utf8') as f: print('Preql Types', file=f) print('===========', file=f) for t in T.values(): try: print(autodoc(t).print_rst(), file=f) except NotImplementedError: pass with open(modules_fn, 'w', encoding='utf8') as f: print('Preql Modules', file=f) print('=============', file=f) print(doc_module(p('__builtins__')).print_rst(), file=f) p('import graph') print(doc_module(p('graph')).print_rst(), file=f)
from ipykernel.kernelbase import Kernel # import requests from . import __version__ import preql from preql.autocomplete import autocomplete from preql import Preql, Signal pql = Preql() pql.set_output_format('html') class PreqlKernel(Kernel): implementation = 'Preql' implementation_version = __version__ language = 'preql' language_version = preql.__version__ language_info = { 'name': 'Preql', 'mimetype': 'text/x-pql', 'file_extension': '.pql', 'pygments_lexer': 'go', } banner = "Preql" def do_execute(self, code, silent, store_history=True, user_expressions=None, allow_stdin=False):
"""Start a Preql interactive environment with an airports table, based on a JSON url. Uses pandas for reading and handling the JSON file. """ import pandas as pd from preql import Preql AIRPORTS_JSON_URL = 'https://gist.githubusercontent.com/tdreyno/4278655/raw/7b0762c09b519f40397e4c3e100b097d861f5588/airports.json' airports = pd.read_json(AIRPORTS_JSON_URL) p = Preql() p.import_pandas(airports_full=airports) p(''' // Remove unhelpful fields airports = airports_full{... !url !tz !phone !email !type} // All airports sorted by elevation (highest first) airports_by_highest = airports order {^elev} // Count of airports in each country, sorted by highest airports_by_country = airports {country => airport_count: count()} order {^airport_count} ''') p.start_repl()
def Preql(self, **kw): settings.optimize = self.optimized preql = Preql(self.uri, **kw) self.preql = preql return preql
class Vector(Base): __tablename__ = 'Vector' id = Column(Integer, primary_key=True) v = Column(Integer) VECTOR_COUNT = 1000 settings.typecheck = False settings.cache = True Base.metadata.create_all(engine) Session = sessionmaker(bind=engine) session = Session() pql = Preql() conn = engine.raw_connection().connection pql._interp.state.db._conn = conn cur = conn.cursor() pql(''' table Vector { id: t_id ... } func get(id_) = Vector[id==id_]{v} ''') def pql_get(id_): res = pql.get(id_).to_json() if len(res) != 1:
--------------------------------------- test1 - simple selection and projection * SQL : 0.010223775863647462 * Preql: 0.010765978813171387 test2 - multijoin and groupby * SQL : 0.03636674237251282 * Preql: 0.03679810237884522 """ import time from preql import Preql, T p = Preql() p.load('../examples/chinook.pql', rel_to=__file__) ITERS = 100 def _measure_sql(sql, iters=ITERS): start = time.time() for i in range(iters): l = p._interp.state.db._backend_execute_sql(sql).fetchall() elapsed = time.time() - start return l, elapsed / iters def test1(): print("test1 - simple selection and projection") sql = r"select *, a.Title from tracks t join albums a using(AlbumId) where Title like '%r%'" l1, elapsed = _measure_sql(sql)