<html><head><meta http-equiv="Content-Type" content="text/html charset=utf-8"></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;" class=""><div><blockquote type="cite" class=""><div class="">On 25 Mar 2017, at 10:58, Brice PARENT <<a href="mailto:contact@brice.xyz" class="">contact@brice.xyz</a>> wrote:</div><br class="Apple-interchange-newline"><div class="">
<meta content="text/html; charset=windows-1252" http-equiv="Content-Type" class="">
<div bgcolor="#FFFFFF" text="#000000" class=""><p class="">Hello!</p><div class=""><br class=""></div></div></div></blockquote>Hello!</div><div><br class=""><blockquote type="cite" class=""><div class=""><div bgcolor="#FFFFFF" text="#000000" class=""><p class="">If I had to provide a unified way of dealing with data, whatever
its source is, I would probably go with creating an standardized
ORM, probably based on Django's or PonyORM, because:</p><p class="">- it doesn't require any change in the Python language</p><div class=""><br class=""></div></div></div></blockquote><div><br class=""></div>So we basically want to be just like PonyORM (the part that executes comprehensions against objects and databases), </div><div>except we find that the current comprehension syntax is not powerful enough to express all the queries we want. So </div><div>we extended the comprehension syntax, and then our strategy is a lot like PonyORM.</div><div><blockquote type="cite" class=""><div class=""><div bgcolor="#FFFFFF" text="#000000" class=""><p class="">- it allows queries for both reading and writing. I didn't see a
way to write (UPDATE, CREATE and DELETE equivalents), but maybe I
didn't look right. Or maybe I didn't understand the purpose at
all!</p><div class=""><br class=""></div></div></div></blockquote><div><br class=""></div>Good point! This is a hard one, a single query in PythonQL can go against multiple databases, so doing updates with queries can be a big problem.</div><div>We can add an insert/update/delete syntax to PythonQL and just track that these operations make sense.</div><div><blockquote type="cite" class=""><div class=""><div bgcolor="#FFFFFF" text="#000000" class=""><p class="">- it makes it easy (although not fast) to extend to any backend
(files, databases, or any other kind of data storage)</p><div class=""><br class=""></div></div></div></blockquote><div><br class=""></div>Going to different backends is not a huge problem, just a bit of work.<br class=""><blockquote type="cite" class=""><div class=""><div bgcolor="#FFFFFF" text="#000000" class=""><p class="">- as a pure python object, any IDE already supports it.</p><p class="">- It can live as a separate module until it is stable enough to
be integrated into standard library (if it should ever be
integrated there).</p><div class=""><br class=""></div></div></div></blockquote><br class="">So we live as an external module via an encoding hack :)</div><div><blockquote type="cite" class=""><div class=""><div bgcolor="#FFFFFF" text="#000000" class=""><p class="">- it is way easier to learn and use. Comprehensions are not the
easier things to work with. Most of the places I worked in forbid
their use except for really easy and short cases (single line,
single loop, simple tests). You're adding a whole new syntax with
new keywords to one of the most complicated and less readable (yet
efficient in many cases, don't get me wrong) part of the language.<br class=""></p></div></div></blockquote><div><br class=""></div><div>Yes, that’s true. But comprehensions are basically a small subset of SQL, we’re extending it a bit to get the full power</div><div>of query language. So we’re catering to folks that already know this language or are willing to learn it for their</div><div>daily needs.</div><blockquote type="cite" class=""><div class=""><div bgcolor="#FFFFFF" text="#000000" class=""><p class="">
</p><p class="">I'm not saying there is no need for what you're developing, there
probably is if you did it, but maybe the solution you chose isn't
the easier way to have it merged to the core language, and if it
was, it would really be a long shot, as there are many new
keywords and new syntax to discuss, implement and test. <br class=""></p></div></div></blockquote><div><br class=""></div>Yes, we started off by catering to folks like data scientists or similar folks that have to write really complex queries all the time.<br class=""><blockquote type="cite" class=""><div class=""><div bgcolor="#FFFFFF" text="#000000" class=""><p class="">
</p><p class="">But I like the idea of a standard API to deal with data, a nice
battery to be included.</p><p class="">Side note : I might not have understood what you were doing, so
if I'm off-topic, tell me !</p><p class="">-Brice<br class=""></p></div></div></blockquote><div><br class=""></div><div>Thanks for the feedback! This is very useful.</div><blockquote type="cite" class=""><div class=""><div bgcolor="#FFFFFF" text="#000000" class=""><p class="">
</p>
<br class="">
<div class="moz-cite-prefix">Le 24/03/17 à 16:10, Pavel Velikhov a
écrit :<br class="">
</div>
<blockquote cite="mid:629E7A2A-7668-4A9B-A812-F846A2785E3D@gmail.com" type="cite" class="">
<meta http-equiv="Content-Type" content="text/html;
charset=windows-1252" class="">
Hi folks!
<div class=""><br class="">
<div class=""> We started a project to extend Python with a
full-blown query language about a year ago. The project is
call PythonQL, the links are given below in the references
section. We have implemented what is kind of an alpha version
now, and gained some experience and insights about why and
where this is really useful. So I’d like to share those with
you and gather some opinions whether you think we should try
to include these extensions in the Python core.</div>
<div class=""><br class="">
</div>
<div class=""><b class="">Intro</b></div>
<div class=""><br class="">
</div>
<div class=""> What we have done is (mostly) extended Python’s
comprehensions with group by, order by, let and window
clauses, which can come in any order, thus comprehensions
become a query language a bit cleaner and more powerful than
SQL. And we added a couple small convenience extensions, like
a We have identified three top motivations for folks to use
these extensions:</div>
<div class=""><br class="">
</div>
<div class=""><b class="">Our Motivations</b></div>
<div class=""><br class="">
</div>
<div class="">1. This can become a standard for running queries
against database systems. Instead of learning a large number
of different SQL dialects (the pain point here are libraries
of functions and operators that are different for each
vendor), the Python developer needs only to learn PythonQL and
he can query any SQL and NoSQL database.</div>
<div class=""><br class="">
</div>
<div class="">2. A single PythonQL expression can integrate a
number of databases/files/memory structures seamlessly, with
the PythonQL optimizer figuring out which pieces of plans to
ship to which databases. This is a cool virtual database
integration story that can be very convenient, especially now,
when a lot of data scientists use Python to wrangle the data
all day long.</div>
<div class=""><br class="">
</div>
<div class="">3. Querying data structures inside Python with the
full power of SQL (and a bit more) is also really convenient
on its own. Usually folks that are well-versed in SQL have to
resort to completely different means when they need to run a
query in Python on top of some data structures.</div>
<div class=""><br class="">
</div>
<div class=""><b class="">Current Status</b></div>
<div class=""><br class="">
</div>
<div class="">We have PythonQL running, its installed via pip
and an encoding hack, that runs our preprocessor. We currently
compile PythonQL into Python using our executor functions and
execute Python subexpressions via eval. We don’t do any
optimization / rewriting of queries into languages of
underlying systems. And the query processor is basic too, with
naive implementations of operators. But we’ve build DBMS
systems before, so if there is a good amount of support for
this project, we’ll be able to build a real system here.</div>
<div class=""><br class="">
</div>
<div class=""><b class="">Your take on this</b></div>
<div class=""><br class="">
</div>
<div class="">Extending Python’s grammar is surely a painful
thing for the community. We’re now convinced that it is well
worth it, because of all the wonderful functionality and
convenience this extension offers. We’d like to get your
feedback on this and maybe you’ll suggest some next steps for
us.</div>
<div class=""><br class="">
</div>
<div class=""><b class="">References</b></div>
<div class=""><br class="">
</div>
<div class="">PythonQL GitHub page: <a moz-do-not-send="true" href="https://github.com/pythonql/pythonql" class="">https://github.com/pythonql/pythonql</a></div>
<div class="">PythonQL Intro and Tutorial (this is all User
Documentation we have right now): <a moz-do-not-send="true" href="https://github.com/pythonql/pythonql/wiki/PythonQL-Intro-and-Tutorial" class="">https://github.com/pythonql/pythonql/wiki/PythonQL-Intro-and-Tutorial</a></div>
<div class="">A use-case of querying Event Logs and doing
Process Mining with PythonQL: <a moz-do-not-send="true" href="https://github.com/pythonql/pythonql/wiki/Event-Log-Querying-and-Process-Mining-with-PythonQL" class="">https://github.com/pythonql/pythonql/wiki/Event-Log-Querying-and-Process-Mining-with-PythonQL</a></div>
<div class="">PythonQL demo site: <a moz-do-not-send="true" href="http://www.pythonql.org/" class="">www.pythonql.org</a></div>
<div class=""><br class="">
</div>
<div class="">Best regards,</div>
<div class="">PythonQL Team</div>
<div class=""><br class="">
</div>
<div class=""><br class="">
</div>
<div class=""><br class="">
</div>
<div class=""><br class="">
</div>
</div>
<br class="">
<fieldset class="mimeAttachmentHeader"></fieldset>
<br class="">
<pre wrap="" class="">_______________________________________________
Python-ideas mailing list
<a class="moz-txt-link-abbreviated" href="mailto:Python-ideas@python.org">Python-ideas@python.org</a>
<a class="moz-txt-link-freetext" href="https://mail.python.org/mailman/listinfo/python-ideas">https://mail.python.org/mailman/listinfo/python-ideas</a>
Code of Conduct: <a class="moz-txt-link-freetext" href="http://python.org/psf/codeofconduct/">http://python.org/psf/codeofconduct/</a>
</pre>
</blockquote>
<br class="">
</div>
_______________________________________________<br class="">Python-ideas mailing list<br class=""><a href="mailto:Python-ideas@python.org" class="">Python-ideas@python.org</a><br class="">https://mail.python.org/mailman/listinfo/python-ideas<br class="">Code of Conduct: http://python.org/psf/codeofconduct/<br class=""></div></blockquote></div><br class=""></body></html>