ORM框架Peewee(四改)

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/a6864657/article/details/100747415

三、修改

1、save

save() 方法可以插入一条记录,一旦模型实例具有主键,
任何后续调用 save() 都将导致 UPDATE 而不是另一个 INSERT

p = Person(Name='王五', Age=17, Birthday=date(1998, 01, 01))
p.save()			

p.Remarks = 'abc'
p.save()	

第一次saveINSERT,第二次是 UPDATE
在执行第一个 save() 方法的时候,主键没值,所以执行 INSERTsave() 方法执行之后,自增列的值就返回并赋给了模型实例,所以第二次调用 save() 执行的是 UPDATE
模型中如没有指定主键,peewee 会自动增加一个名为 id 的自增列作为主键。

2、update

**update 用于批量更新,方法相对简单,以下三种写法都可以
peewee的update是原子的(Atomic )

# 方法一
Person.update({Person.Name: '赵六', Person.Remarks: 'abc'}).where(Person.Name=='王五').execute()

# 方法二
Person.update({'Name': '赵六', 'Remarks': 'abc'}).where(Person.Name=='张三').execute()

# 方法三
Person.update(Name='赵六', Remarks='abc').where(Person.Name=='李四').execute()

3、原子更新

subquery = Tweet.select(fn.COUNT(Tweet.id)).where(Tweet.user == User.id)
update = User.update(num_tweets=subquery)
update.execute()

upsert 操作。如指定键存在就更新,如不存在执行插入

无论以前是否存在过,存在更新,不存在则插入 replaceon_conflict_replace()是等效的

last_login值将更新,

user_id = User.replace(username='the-user', last_login=datetime.now()).execute())

user_id = User.insert(username='the-user', last_login=datetime.now()).on_conflict_replace().execute())

另外 mysql 还提供了一种独有的语法 ON DUPLICATE KEY UPDATE 可以使用以下方法实现。

class User(Model):
    username = TextField(unique=True)
    last_login = DateTimeField(null=True)
    login_count = IntegerField()

#插入一个新用户
User.create(username='huey', login_count=0)

# 模拟用户登录. 
登录计数和时间戳,要么正确创建,要么更新。

now = datetime.now()
rowid = User.insert(username='huey', last_login=now, login_count=1)
         .on_conflict(preserve=[User.last_login],  # 使用我们将插入的值
         .update={User.login_count: User.login_count + 1}
         ).execute()

我们可以用 update 方法来实现。

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

https://juejin.im/post/5c75ee5a6fb9a049ad77b6f7#heading-12
https://www.cnblogs.com/piperck/p/9194311.html
谢谢大佬

猜你喜欢

转载自blog.csdn.net/a6864657/article/details/100747415