[英]How to create generated column in Flask-SQLAlchemy?
这个SQL没问题
CREATE TABLE `calendar` (
`dt` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
`d` date as (dt),
`t` time as (dt)
);
如何在 Flask-SQLAlchemy 中创建这个表?
class Calendar(db.Model):
__table_args__ = {'mysql_collate': 'utf8_general_ci', 'mysql_engine':'InnoDB'}
id = db.Column(db.Integer, primary_key=True, autoincrement=True)
dt = db.Column(db.DateTime, nullable=False, server_default=db.func.current_timestamp())
d = ???
t = ???
db.create_all()
这是错误
class Calendar(db.Model):
__table_args__ = {'mysql_collate': 'utf8_general_ci', 'mysql_engine':'InnoDB'}
id = db.Column(db.Integer, primary_key=True, autoincrement=True)
dt = db.Column(db.DateTime, nullable=False, server_default=db.func.current_timestamp())
d = db.ColumnProperty(db.Date,dt)
t = db.ColumnProperty(db.Time,dt)
也许这不是您想要的,但仍然:我建议改用hybrid_property
( 请参阅此处的文档),如下所示:
from sqlalchemy.ext.hybrid import hybrid_property
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy import Column, Integer, String, Float, Dat
from datetime import datetime
Base = declarative_base()
class User(Base):
__tablename__ = 'user'
id = Column(Integer, primary_key=True)
firstname = Column(String(50))
lastname = Column(String(50))
birthdate = Column(DateTime, nullable=False, )
@hybrid_property
def birthyear(self):
return self.birthdate.strftime("%Y/%m/%d")
@hybrid_property
def birthtime(self):
return self.birthdate.strftime("%H:%M:%S")
us = User(firstname="Jon",
lastname="Snow",
birthdate=datetime(1986, 12, 26, 23, 59, 59))
print(us.firstname, us.lastname, us.birthyear, us.birthtime)
这对我有用
geom
是引用的列
expire_on_flush
避免在计算列中插入或更新。
distance = column_property(db.Column(db.Float,Computed("Round((st_length(geom,false)::numeric /1000),2)",True),nullable=True),expire_on_flush= True)
希望它有效
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.