2015-03-02 3 views
0

Как вы можете видеть снизу, я пытаюсь обновить запись, но по некоторым причинам я получаю эти ошибки. Я слежу за документацией Peewee, и я нашел несколько других, у которых есть те же проблемы, но не с ORM от Djano, а не с Peewee. Я попытался включить «__» вместо «.». классификатор без везения.Ключевое слово Peewee Model не может быть выражением в Update

Испытано код

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 Модель:

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' 

Я после документации от 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. 

ответ