Заставить python принимать изменения переменных из базы данных без перезапуска кода - PullRequest
0 голосов
/ 04 марта 2019

Я использую следующий код для извлечения переменных из базы данных, которую Python использует для запуска автоматизированной машины.Я устанавливаю переменные через управляемый PHP веб-интерфейс.Python читает переменные и действует в соответствии с инструкциями.

Однако во время калибровки машины мы вынуждены перезапустить python, чтобы принять любые переменные изменения.Python не мой родной язык и не первый язык моих коллег.Очевидно, это сэкономило бы много времени, если бы нам не приходилось перезапускать python для принятия изменений переменных.

Наш класс списка переменных построен следующим образом:

class VariableList():
connectdb = DbConnector(host='localhost', user='a', password='b', database='c')
result = connectdb.selectDb('variablelist','varA,varB')
for row in result:
    # INPUTS
    varA = row[1]
    varB = row[2] 

Как Pythonic может обойти эту проблему?Геттеры / сеттеры?@имущество?Пример для подражания был бы очень признателен ...

1 Ответ

0 голосов
/ 04 марта 2019

легкий. Реализация Python выглядит следующим образом:


class VariableList():

    def __init__(self):
        self.db_con = DbConnector(host='localhost', user='a', password='b', database='c')

    @property
    def varA(self):
        return self.db_con.selectDb('variablelist','varA')

    @property.setter
    def varA(self, value):
        self.db_con.updateDb('variablelist', value)

, а также вы можете выполнить рефакторинг вашей модели с помощью SQLAlchemy framework.например

from sqlalchemy (
    create_engine,
    Column, 
    Integer, 
    String,
)
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import sessionmaker

Base = declarative_base()
engine = create_engine(DB_DNS, 
                       pool_size=DB_POOL_SIZE, 
                       max_overflow=DB_MAX_OVERFLOW,
                       pool_recycle=DB_POOL_RECYCLE,
                       isolation_level="READ UNCOMMITTED",  # attention, the last one is important!
         )
Session = sessionmaker(bind=engine,
                       autocommit=False,
                       expire_on_commit=False)

class MyTable(Base):

    __tablename__ = MY_TABLE_NAME

    id = Column(Integer, primary=True)
    name = Column(String(32), nullable=True, default='', doc='user_name')

# query something
result = Session().query(MyTable).filter(CONDITION).all()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...