Dear CubicWeb experts,<br><br>I wonder if it is possible for a Python script (without server, user authentication, etc.) to define a schema with Yams, create a database with SQLite and use RQL for querying. My goal is to find a suitable file format to store graphs, do queries on them and eventually put/pull them in/from real databases. I was thinking to use directly SQLite but I would really appreciate to have the power of RQL queries. And it would even make more sense if our databases are based on CubicWeb.<br>

<br>I looked at CubicWeb sources and test codes and I had been able to build an incomplete schema (for instance it has no "is" relation) and to get SQL code to generate some tables within a SQLite database but I did not find a way to use RQL queries on it. Here is the code I used for my tests:<br>

<br><div style="margin-left: 40px; font-family: courier new,monospace;"><font size="1">from yams.schema import Schema<br>from yams.schema2sql import schema2sql<br>from yams.buildobjs import register_base_types, EntityType, RelationType, RelationDefinition, String<br>

from logilab.common.db import get_connection<br>from logilab.common.adbh import get_adv_func_helper<br>from cubicweb.server.sources.rql2sql import SQLGenerator<br>from rql import RQLHelper<br>from cubicweb.server.rqlannotation import SQLGenAnnotator<br>

from cubicweb.schema import CubicWebSchema<br><br># Schema definition<br>#class Node( EntityType ):<br>#  name = String()<br><br># Create schema (still incomplete)<br>schema = CubicWebSchema( 'Graph Schema' )<br>
#register_base_types( schema )<br>
schema.add_entity_type( EntityType( 'Node' ) )<br>#schema.add_entity_type( Node() )<br>schema.add_relation_type( RelationType( 'name' ) )<br>schema.add_relation_def( RelationDefinition( 'Node', 'name','String' ) )<br>

<br># Create connection to memory database<br>dbhelper = get_adv_func_helper( 'sqlite' )<br>cnx = get_connection( driver='sqlite', database=':memory:' )<br>print cnx<br><br># Put schema in database (to be improved)<br>

sql = schema2sql( dbhelper, schema )<br>for r in sql.split( '\n\n' ):<br>  for r2 in r.split( ';' ):<br>    r2 = r2.strip()<br>    if r2:<br>      print '-->', r2<br>      cnx.cursor().execute( r2 )<br>

cnx.commit()<br><br># Use rql (does not work at all)<br>rql = 'INSERT Node X: X name "toto"'<br>r = RQLHelper( schema )<br>a = SQLGenAnnotator( schema )<br>g = SQLGenerator( schema, dbhelper )<br><br>rqlst = r.parse( rql )<br>

a.annotate( rqlst )<br>print g.select_sql( rqlst )<br></font></div> <br><br>Any help would be very appreciated,<br><br>      Yann<br><br>