Greetings!

I seem to be having a problem using DAL with legacy databases, namely those 
without an existing AUTO_INCREMENT field:

db.define_table('manufactured_by',
    Field('product', 'string'),
    Field('brand', 'string'),
    primarykey=['product', 'brand'])

With a similar setup the update() function works well:

db.manufactured_by.insert(product="Perfume", brand="Chanel")
rset = db(db.manufactured_by.product=="Perfume")
rset.update(brand="Dior")

Whereas the update_record() function throws an error -- KeyError: 
'update_record':

row = rset.select().first()
row.update_record(brand="Fendi")

Same for update_or_insert() which relies on calling update_record(). Tried 
with SQLite and MySQL backends. Is there any way to make those work?

Many thanks!

Dmitry
from gluon.dal import DAL, Field
db = DAL('sqlite://sqlite.db')
db.define_table('manufactured_by',
    Field('product','string'),
    Field('brand', 'string'),
    primarykey=['product', 'brand'])

db.manufactured_by.insert(product="Perfume", brand="Chanel")

rset = db(db.manufactured_by.product=="Perfume")
row = rset.select().first()
print "product =", row.product, ", brand =", row.brand

# This one works fine
rset.update(brand="Dior")
row = rset.select().first()
print "product =", row.product, ", brand =", row.brand

# This throws an error -- KeyError: 'update_record'.
row.update_record(brand="Fendi")
print "product =", row.product, ", brand =", row.brand

# Same error for update_or_insert(), which calls update_record()

Reply via email to