本文介绍了使用Postgres在SqlAlchemy模型中动态生成的字段的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我想为Float类型一天中的每一小时创建一个带有列的表。 如何摆脱这种冗长的语法:
I want to create a table with a column for each hour of the day of Float type. How do I get rid of this verbose syntax:
from app import db class HourlySchedule(db.Model): id = db.Column( db.Integer, primary_key=True ) h0 = db.Column(db.Float, nullable=True) h1 = db.Column(db.Float, nullable=True) h2 = db.Column(db.Float, nullable=True) h3 = db.Column(db.Float, nullable=True) h4 = db.Column(db.Float, nullable=True) h5 = db.Column(db.Float, nullable=True) h6 = db.Column(db.Float, nullable=True) h7 = db.Column(db.Float, nullable=True) h8 = db.Column(db.Float, nullable=True) h9 = db.Column(db.Float, nullable=True) h10 = db.Column(db.Float, nullable=True) h11 = db.Column(db.Float, nullable=True) h12 = db.Column(db.Float, nullable=True) h13 = db.Column(db.Float, nullable=True) h14 = db.Column(db.Float, nullable=True) h15 = db.Column(db.Float, nullable=True) h16 = db.Column(db.Float, nullable=True) h17 = db.Column(db.Float, nullable=True) h18 = db.Column(db.Float, nullable=True) h19 = db.Column(db.Float, nullable=True) h20 = db.Column(db.Float, nullable=True) h21 = db.Column(db.Float, nullable=True) h22 = db.Column(db.Float, nullable=True) h23 = db.Column(db.Float, nullable=True)另一个问题是如何对值执行检查(例如0< =值< = 1)?
Another question is how do I enforce checks on the values (e.g. 0 <= value <=1)?
作为验证?然后,如何为24个字段整齐地设置验证?
As validation? Then how do i set validation neatly for 24 fields?
我可以改为使用SqlAlchemy添加检查约束吗?
Can I instead add a check constraint with SqlAlchemy?
推荐答案这里的关键是要意识到 class 块只是代码块,因此可以在其中放置循环:
The key here is to realize that a class block is just a block of code, so you can put loops in there:
class HourlySchedule(db.Model): id = db.Column(db.Integer, primary_key=True) for i in range(24): locals()["h{}".format(i)] = db.Column(db.Float) @validates(*("h{}".format(i) for i in range(24))) def _validate(self, k, h): assert 0 <= h <= 1 return h更多推荐
使用Postgres在SqlAlchemy模型中动态生成的字段
发布评论