繁体   English   中英

强制python接受来自数据库的变量更改而无需重新启动代码

[英]Forcing python to accept variable changes from database without restarting code

我正在使用以下代码从 Python 用于运行自动化机器的数据库中检索变量。 我通过 PHP 驱动的 Web 界面设置变量。 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 方法是什么? 吸气剂/二传手? @财产? 一个遵循的例子将非常感谢......

容易的。 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框架重构您的模型。 例如

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()

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM