You can submit an issue to the pyDAL repo. On Saturday, March 12, 2016 at 6:03:10 PM UTC-5, Val K wrote: > > > I've solved my problem - just additional condition > in dal\pydal\adapters\base.py: > > 298. > 299. > 300. > 301. > 302. > 303. > > 304. > 305. > 306. > 307. > > > # must be PK reference or unique > if rfield.type[:10] != 'reference ' and rfield.type[:14] != > 'big-reference ' and \ > getattr(rtable, '_primarykey', None) and rfieldname in > rtable._primarykey or \ > rfield.unique: > ftype = types[rfield.type[:9]] % \ > dict(length=rfield.length) > > # multicolumn primary key reference? > if not rfield.unique and len(rtable._primarykey)>1: > # then it has to be a table level FK > if rtablename not in TFK: > > > works fine! > > > > > On Sunday, March 13, 2016 at 12:17:06 AM UTC+3, Val K wrote: >> >> OK! Let's dance >> >> This doesn't work (with SQLite at least): >> db.define_table('a_tbl', Field('id', 'integer'), Field('name'), >> primarykey=['id'] ) # one keyed table >> db.define_table('b_tbl', Field('id', 'reference a_tbl.id'), >> Field('name'), primarykey=['id']) # another keyed table >> >> <class 'sqlite3.OperationalError'> near "name": syntax error >> >> >> sql.log: >> *CREATE TABLE b_tbl(* >> * id INTEGER, CONSTRAINT "FK_b_tbl_id__constraint" FOREIGN KEY (id) >> REFERENCES a_tbl (id) ON DELETE CASCADE,** name CHAR(512),** >> PRIMARY KEY(id)) ;* >> >> >> This doesn't work too: >> db.define_table('a_tbl', Field('id', 'integer'), Field('name'), >> primarykey=['id'] ) # one keyed table >> db.define_table('b_tbl', Field('id', db.a_tbl), Field('name'), >> primarykey=['id']) # another keyed table >> it produces the same sql.log and causes the same error - expected >> >> >> But this works!: >> db.define_table('a_tbl', Field('id', 'id'), Field('name') ) # not keyed >> table >> db.define_table('b_tbl', Field('id', 'reference a_tbl'), Field('name'), >> primarykey=['id']) # keyed table that references to not keyed table >> >> >> it produces another sql.log: >> CREATE TABLE b_tbl( >> id INTEGER REFERENCES a_tbl (id) ON DELETE CASCADE NOT NULL , >> name CHAR(512), >> PRIMARY KEY(id)) ; >> >> >> >> >> >> >> >> >> >> >> >> >> On Saturday, March 12, 2016 at 8:54:37 PM UTC+3, Anthony wrote: >>> >>> Not sure if it's a bug, but the book does say: >>> >>> - Keyed tables can only reference other keyed tables. >>> - Referencing fields must use the reference tablename.fieldname >>> format. >>> >>> Anthony >>> >>> On Saturday, March 12, 2016 at 4:52:53 AM UTC-5, Val K wrote: >>>> >>>> Hi! >>>> I have a problem - look at example: >>>> >>>> db.define_table('a_tbl', Field('name')) >>>> db.define_table('b_tbl', Field('id', 'reference a_tbl') ,Field('name'), >>>> primarykey=['id']) >>>> db.define_table('c_tbl', Field('b_tbl_id', 'reference b_tbl') >>>> ,Field('name')) >>>> >>>> >>>> *c_tbl* definition causes an error (see below) because there is >>>> *b_tbl_id* field that references to *b_tbl* that has *id* reference >>>> to *a_tbl* >>>> >>>> Is this a bug? >>>> >>>> >>>> >>>> >>>> ---------------------------------------------------------------------------------------------------------- >>>> >>>> <type 'exceptions.KeyError'> 'foreign_key' >>>> >>>> web2py™Version 2.13.4-stable+timestamp.2015.12.26.04.59.39PythonPython >>>> 2.7.9: >>>> >>>> >>>> *File D:\web2py_last\web2py\gluon\packages\dal\pydal\adapters\base.py >>>> in create_table at line 303* >>>> Function argument list >>>> >>>> (self=<pydal.adapters.sqlite.SQLiteAdapter object>, table=<Table c_tbl >>>> (id,name)>, migrate=True, fake_migrate=False, polymodel=None) >>>> Code listing >>>> >>>> 298. >>>> 299. >>>> 300. >>>> 301. >>>> 302. >>>> 303. >>>> >>>> 304. >>>> 305. >>>> 306. >>>> 307. >>>> >>>> >>>> # must be PK reference or unique >>>> if getattr(rtable, '_primarykey', None) and rfieldname in >>>> rtable._primarykey or \ >>>> rfield.unique: >>>> ftype = types[rfield.type[:9]] % \ >>>> dict(length=rfield.length) >>>> >>>> # multicolumn primary key reference? >>>> if not rfield.unique and len(rtable._primarykey)>1: >>>> # then it has to be a table level FK >>>> if rtablename not in TFK: >>>> >>>> >>>> >>>> >>>>
-- Resources: - http://web2py.com - http://web2py.com/book (Documentation) - http://github.com/web2py/web2py (Source code) - https://code.google.com/p/web2py/issues/list (Report Issues) --- You received this message because you are subscribed to the Google Groups "web2py-users" group. To unsubscribe from this group and stop receiving emails from it, send an email to web2py+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/d/optout.