Я новичок в python, SQLAlchemy и stackfoverflow (извините, если мой вопрос не ясен), стараюсь изо всех сил.
Мой вопрос: как я могу динамически обновить значение в базе данных,
через динамический фильтр. Я хочу остаться независимым от имени столбца. Я хочу, чтобы пользователь пропустил фильтр, чтобы найти строку и выражение, какое поле изменить. Идея состоит в том, чтобы создать универсальную функцию, которая делает это. У меня возникли проблемы с пониманием, как использовать для этого атрибут set или, может быть, есть другой способ Спасибо
Импорт:
from sqlalchemy.orm import (
mapper,
relationship,
sessionmaker)
from sqlalchemy import *
Инициирование и подключение БД
initation = 'mysql+pymysql://user:password@localhost/km'
kmdb = create_engine( initation, pool_recycle=3600 ) # connect to server
kmdb.echo = False
Conn = kmdb.connect()
Meta = MetaData(bind=kmdb)
My_Session = sessionmaker()
My_Session.configure( bind=kmdb )
MySession=My_Session()
Описание таблицы:
country_hdl = Table( 'km_test_mapping', Meta,
Column( 'country_mapping_id', Integer, primary_key=True ),
Column( 'origin_client_id', String( 40 ) ),
Column( 'origin_source_id', String( 30 ) ),
Column( 'origin_cntrp_country', String( 30 ) ),
Column( 'som_cntrp_country', String( 30 ) ),
Column( 'can_use', Boolean ),
UniqueConstraint( 'origin_client_id', 'origin_source_id', 'origin_cntrp_country' )
)
# сопоставили таблицу с классом Country
class Country( object ):
pass
mapper( Country, country_hdl )
cntry = Country()
# Передаваемые динамические переменные (фильтр и значение для изменения):
#I want to dynamically search for origin_client_id = MX01 and if found replace origin_client_id with CAL01. These values are passed as variables by user
myfilter = {'origin_source_id': 'MX01’}
updatefieldvalue={'origin_client_id':'CAL01’}
# Функция запроса:
query = MySession.query( country_hdl ).filter_by( **myfilter )
results = query.all()
# Замена поля (полей), если найдено:
if results:
for column,value in updatefieldvalue.items():
setattr(results[0],column,value)
Ошибка:
Traceback (most recent call last):
File "/Users/gerardrafie/Developments/KPIMinds/sampleapp/db.py",
line 63, in <module> .
setattr(results[0],column,value) .
AttributeError: can't set attribute .