Sorry for my previous empty message. I still do not understand how I sent it (I should go to sleep).<br><br>With Sylvain's advices, I have been able to load a schema and initialise a database but when I try to convert an RQL query to SQL I have an exception that is quite hard to track for me:<br>
<br>yann@petityann:~/cubicweb/embedded_cubicweb$ python embedded_cubicweb.py <br>
Schema: <yams.schema.Schema object at 0x87877ac><br>Traceback (most recent call last):<br>  File "embedded_cubicweb.py", line 47, in <module><br>    print rql2sql( rql, {}, rql_helper, sql_generator )<br>

  File "embedded_cubicweb.py", line 20, in rql2sql<br>    return sql_generator.generate( rqlst, args )<br>  File "/usr/local/cubicweb/cubicweb/server/sources/rql2sql.py", line 369, in generate<br>    sql = self.union_sql(union)<br>

  File "/usr/local/cubicweb/cubicweb/server/sources/rql2sql.py", line 389, in noparen_union_sql<br>    return '\nUNION ALL\n'.join(sqls)<br>  File "/usr/local/cubicweb/cubicweb/server/sources/rql2sql.py", line 388, in <genexpr><br>

    for i, select in enumerate(union.children))<br>  File "/usr/local/cubicweb/cubicweb/server/sources/rql2sql.py", line 401, in select_sql<br>    distinct = selectsortterms = select.need_distinct<br><b>AttributeError: 'VariableRef' object has no attribute 'need_distinct'<br>

</b><br><div class="gmail_quote">On Fri, Feb 26, 2010 at 2:52 PM, Sylvain Thénault <span dir="ltr"><<a href="mailto:sylvain.thenault@logilab.fr" target="_blank">sylvain.thenault@logilab.fr</a>></span> wrote:<br><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">

Hello Yann,<br>
<div><br>
On 26 février 14:15, Yann Cointepas wrote:<br>
> I wonder if it is possible for a Python script (without server, user<br>
> authentication, etc.) to define a schema with Yams, create a database with<br>
> SQLite and use RQL for querying. My goal is to find a suitable file format<br>
> to store graphs, do queries on them and eventually put/pull them in/from<br>
> real databases. I was thinking to use directly SQLite but I would really<br>
> appreciate to have the power of RQL queries. And it would even make more<br>
> sense if our databases are based on CubicWeb.<br>
<br>
</div>huumm, that looks like a very nice use case. We're very interested in<br>
such usage of yams/rql outside the cubicweb framework (well, the heavy<br>
part of it at list). Unfortunatly we've currently no time to do so but<br>
if you've some, we'll definitly help you to acheive this!<br>
<div><br>
> I looked at CubicWeb sources and test codes and I had been able to build an<br>
> incomplete schema (for instance it has no "is" relation) and to get SQL code<br>
> to generate some tables within a SQLite database but I did not find a way to<br>
> use RQL queries on it.<br>
<br>
</div>Here are some guide lines:<br>
<br>
* build the schema from yams objects directly is too much pain. You should<br>
  be able to write it as usual with python files. If you don't want a whole<br>
  cubicweb schema, something like:<br>
<br>
    from yams.reader import SchemaLoader<br>
    schema = SchemaLoader().load([<directory where schema.py may be found>])<br>
<br>
  should load your schema.<br>
<br>
* to handle rql, something like:<br>
<br>
    from rql import RQLHelper<br>
    from cubicweb.server.sources.rql2sql import SQLGenerator<br>
    rqlh = RQLHelper(schema)<br>
    sqlgen = SQLGenerator(schema, dbms_helper) # get dbms_helper for sqlite from logilab.common.adbh<br>
<br>
    def rql2sql(rql, args):<br>
      """return sql query and args to give to sql cursor:<br>
      cu.execute(*rql2sql('Any X,Y WHERE X relation Y'))<br>
      """<br>
      rqlst = rqlh.parse(rql)<br>
      rqlh.compute_solutions(rqlst, kwargs=args)<br>
      return sqlgen.generate(rqlst, args)<br>
<br>
this is untested pseudo-code but it should put you on the right way. You'll<br>
probably encounter some problems due to missing cw specific stuff in the<br>
schema, but I don't think anything non tweakable. Don't hesitate to ask<br>
more question, and let us tuned about your progress!<br>
<br>
regards,<br>
<font color="#888888">--<br>
Sylvain Thénault                               LOGILAB, Paris (France)<br>
Formations Python, Debian, Méth. Agiles: <a href="http://www.logilab.fr/formations" target="_blank">http://www.logilab.fr/formations</a><br>
Développement logiciel sur mesure:       <a href="http://www.logilab.fr/services" target="_blank">http://www.logilab.fr/services</a><br>
CubicWeb, the semantic web framework:    <a href="http://www.cubicweb.org" target="_blank">http://www.cubicweb.org</a><br>
<br>
</font></blockquote></div><br>