各数据库insert or update

各数据库insert or update

最进使用beego时需要使用insertorupdate功能,但是beego1.6中并没有实现。顾想自己实现一个,查了下各数据库insetorupdate语句,总结在这里。

- mysql:

  • INSERT INTO tablename () VALUES () ON DUPLICATE KEY UPDATE ...
  • 列如:INSERT INTO tablename (id,name) VALUES (1,'ooo') ON DUPLICATE KEY UPDATE id=1,name='qqqq'

- posetgres:

  • INSERT INTO tablename () VALUES () ON CONFLIT (冲突列名) KEY UPDATE SET ...
    -列如:INSERT INTO tablename (id,name) VALUES (1,'ooo') ON CONFLIT (id) UPDATE SET id=1,name='qqqq'

- ORACLE:

  • MERGE [INTO [schema .] table [t_alias]
    USING [schema .] { table | view | subquery } [t_alias]
    ON ( condition )
    WHEN MATCHED THEN merge_update_clause
    WHEN NOT MATCHED THEN merge_insert_clause;

  • **列如:MERGE INTO T T1
    USING (SELECT '1001' AS a,2 AS b FROM dual) T2
    ON ( T1.a=T2.a)
    WHEN MATCHED THEN
    UPDATE SET T1.b = T2.b
    WHEN NOT MATCHED THEN
    INSERT (a,b) VALUES(T2.a,T2.b);

oracle merge into为全表扫描查询 on中的条件然后进行相关操作,使用时应慎重。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
freesql 中的 InsertOrUpdate 方法可以用来实现数据的插入或更新操作,具体实现方法如下: 1. 首先创建一个实体对象,设置需要插入或更新的属性值。 2. 然后使用 InsertOrUpdate 方法,传入实体对象和需要插入或更新的字段名。 3. InsertOrUpdate 方法会根据实体对象的主键值来判断是插入新数据还是更新已有数据。 示例代码如下: ```python from freesql import FreeSql, DbContext # 创建一个实体对象 class User: def __init__(self, id, name, age): self.id = id self.name = name self.age = age # 创建数据库连接 db = FreeSql.create('sqlite://test.db').sync() # 创建一个数据上下文对象 class DemoContext(DbContext): users = db.set(User).primary_key('id').with_properties('name', 'age') # 插入一条新数据 user = User(1, 'Tom', 20) DemoContext().users.insert_or_update(user, 'name', 'age') # 更新一条已有数据 user = User(1, 'Jerry', 21) DemoContext().users.insert_or_update(user, 'name', 'age') ``` 在上面的示例代码中,创建了一个 User 类作为实体对象,包含 id、name 和 age 三个属性。然后创建了一个 DemoContext 类作为数据上下文对象,包含了一个 users 表示实体对象的集合,并指定 id 属性为主键,name 和 age 属性需要进行插入或更新操作。 使用 insert_or_update 方法时,先传入要插入或更新的实体对象 user,然后传入需要插入或更新的字段名,即 name 和 age。如果实体对象的主键值在数据表中不存在,则插入新数据;如果主键值已存在,则更新已有数据。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值