我正在使用以下代码从 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 方法是什么? setter/getter / setter/getter ? @属性(property)?一个遵循的例子将非常感激......
最佳答案
简单的。 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()
关于python - 强制python在不重新启动代码的情况下接受来自数据库的变量更改,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54987004/