As you can see from below I am trying to update a record but for some reason I am getting these errors. I have been following the Peewee documentation, and I found a few others who have the same issues but not with Djano's ORM not Peewee. I tried to put in "__" instead of the "." classifier without any luck.
Tested Code
Python 2.7.9 (default, Feb 1 2015, 21:31:28)
[GCC 4.4.7 20120313 (Red Hat 4.4.7-11)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> from Wee_Models import Thunderdome, ThunderdomeLog
>>> from peewee import *
>>> import peewee
>>> db = MySQLDatabase(database="GrabaDB", host="localhost", port=3306, user="demo", passwd="demo")
>>> q = Thunderdome.update(status='Updated status').where(Thunderdome.port='2310')
File "<stdin>", line 1
SyntaxError: keyword can't be an expression
>>> q = Thunderdome.update(status='Updated status').where(Thunderdome__port='2310')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/local/lib/python2.7/site-packages/peewee.py", line 272, in inner
func(clone, *args, **kwargs)
TypeError: where() got an unexpected keyword argument 'Thunderdome__port'
>>>
Thunderdome Model:
class Thunderdome(BaseModel):
date = DateTimeField()
lock_status = IntegerField()
port = PrimaryKeyField()
security_key = TextField(null=True)
serial = TextField(null=True)
status = TextField(null=True)
class Meta:
db_table = 'ThunderDome'
I am following the documentation from Peewee:
http://peewee.readthedocs.org/en/latest/peewee/api.html#Model.update
http://peewee.readthedocs.org/en/latest/peewee/querying.html
Updating existing records
Once a model instance has a primary key, any subsequent call to save() will result in an UPDATE rather than another INSERT. The model’s primary key will not change:
>>> user.save() # save() returns the number of rows modified.
1
>>> user.id
1
>>> user.save()
>>> user.id
1
>>> huey.save()
1
>>> huey.id
2
If you want to update multiple records, issue an UPDATE query. The following example will update all Tweet objects, marking them as published, if they were created before today. Model.update() accepts keyword arguments where the keys correspond to the model’s field names:
>>> today = datetime.today()
>>> query = Tweet.update(is_published=True).where(Tweet.creation_date < today)
>>> query.execute() # Returns the number of rows that were updated.
4
For more information, see the documentation on Model.update() and UpdateQuery.
You have to write:
q = Thunderdome.update(status='Updatedstatus')\
.where(Thunderdome.port == '2310')
see docs http://docs.peewee-orm.com/en/latest/peewee/api.html?highlight=update#Model.update