[英]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.