And*_*huk 44 python sqlalchemy
在Python中,使用SQLAlchemy,我想插入或更新一行.我试过这个:
existing = db.session.query(Toner)
for row in data:
new = Toner(row[0], row[1], row[2])
Run Code Online (Sandbox Code Playgroud)
这是行不通的.如何new
在Toner
表中插入或更新?我怀疑它已经完成了合并,但我无法理解如何做到这一点.
Eva*_*oky 73
假设某些列名...
插入一个
newToner = Toner(toner_id = 1,
toner_color = 'blue',
toner_hex = '#0F85FF')
dbsession.add(newToner)
dbsession.flush()
Run Code Online (Sandbox Code Playgroud)
插入多个
newToner1 = Toner(toner_id = 1,
toner_color = 'blue',
toner_hex = '#0F85FF')
newToner2 = Toner(toner_id = 2,
toner_color = 'red',
toner_hex = '#F01731')
dbsession.add_all([newToner1, newToner2])
dbsession.flush()
Run Code Online (Sandbox Code Playgroud)
UPDATE
q = dbsession.query(Toner)
q = q.filter(Toner.toner_id==1)
record = q.one()
record.toner_color = 'Azure Radiance'
dbsession.flush()
Run Code Online (Sandbox Code Playgroud)
record = dbsession.merge(Toner( **kwargs))
Run Code Online (Sandbox Code Playgroud)
yur*_*hen 13
sql:
INSERT INTO the_table (id, col1) VALUES (%s, %s)
ON DUPLICATE KEY UPDATE col1 = %s
Run Code Online (Sandbox Code Playgroud)
在py代码中:
// 使用sqlalchemy 1.4.x进行测试,使用mysql
INSERT INTO the_table (id, col1) VALUES (%s, %s)
ON DUPLICATE KEY UPDATE col1 = %s
Run Code Online (Sandbox Code Playgroud)
注意:不同的 sql 方言可能有不同的 sql 语句(sqlalchemy 将处理该问题):
我尝试了很多方法,最后尝试了以下方法:
def db_persist(func):
def persist(*args, **kwargs):
func(*args, **kwargs)
try:
session.commit()
logger.info("success calling db func: " + func.__name__)
return True
except SQLAlchemyError as e:
logger.error(e.args)
session.rollback()
return False
return persist
Run Code Online (Sandbox Code Playgroud)
和:
@db_persist
def insert_or_update(table_object):
return session.merge(table_object)
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
79359 次 |
最近记录: |