baza na odpowiedź od @ Martijn-Pieters, można nie tylko dynamiczne kolumny aktualizacja z setattr
, ale także może wykorzystać dynamiczny stół i kolumnę połączyć z getattr
i setattr
przykład:
# models.py
class User(Base):
__tablename__ = 'users'
id = Column(Integer, primary_key=True)
name = Column(String)
fullname = Column(String)
password = Column(String)
# update.py
import models
def dynamic_update(dynamic_table, col_id, dynamic_cols):
"""
dynamic_table: name of the table, "User" for example
col_id: id of which column you want to update
dynamic_cols: key value pairs {name: "diana"}
"""
if hasattr(models, dynamic_table):
table = getattr(models, dynamic_table)
col_info = table.query.filter_by(id=col_id).first()
for (key, value) in dynamic_cols.items():
if hasattr(table, key):
setattr(col_info, key, value)
session.commit()
BTW , można uzyskać więcej informacji na temat setattr
, getattr
, hasattr
z pytona offical doc https://docs.python.org/2/library/functions.html#setattr
https://docs.python.org/2/library/functions.html#getattr
https://docs.python.org/2/library/functions.html#hasattr
jest to zestaw z GET, może trochę powolny? – chao787
@RichardWong: ORM musi co najmniej sprawdzić, czy wpis istnieje i dać obiektowi szansę zakłócenia danych (mogą to być właściwości hybrydowe itp.). Można oczywiście utworzyć własną instrukcję 'UPDATE' z rdzeniem SQLAlchemy. –
@RichardWong: ale weź pod uwagę, że sesja jest dość zaawansowana w buforowaniu i śledzeniu aktualizacji. Jeśli zdecydujesz się ominąć, musisz również unieważnić pamięć podręczną sesji. –