如何使用 SQLAlchemy 设置默认日期时间值?

问题描述 投票:0回答:1

我正在尝试使用 Python 3.13 中的 SQLAlchemy 库为 MySQL 表中的

created_at
列设置默认服务器值。但是,每当我启动 Flask 应用程序并创建表时,我都会遇到一个问题,即默认值设置为读取
(now())
的字符串,在将
created_at
字段留空时插入一行会返回 MySQL 错误,因为
(now())
不是有效的日期时间。下面是我的代码的结构。

from db import db
from sqlalchemy import Column, DateTime, String, Integer
from sqlalchemy.sql import func

class BlogModel(db.Model):
    __tablename__ = "blogs"

id = Column(Integer, primary_key=True)
created_at = Column(DateTime(timezone=True), server_default=func.now(), nullable=False)

我也尝试了以下方法,得到了相同的结果:

created_at = Column(DateTime(timezone=True), server_default=func.current_timestamp(), nullable=False)

我的

requirements.txt
文件如下:

alembic==1.14.0
apispec==6.8.1
blinker==1.9.0
certifi==2024.12.14
click==8.1.8
distlib==0.3.9
filelock==3.16.1
Flask==3.1.0
Flask-JWT-Extended==4.7.1
Flask-Migrate==4.1.0
flask-smorest==0.45.0
Flask-SQLAlchemy==3.1.1
itsdangerous==2.2.0
Jinja2==3.1.5
Mako==1.3.8
MarkupSafe==3.0.2
marshmallow==3.25.1
packaging==24.2
pipenv==2024.4.0
platformdirs==4.3.6
PyJWT==2.10.1
PyMySQL==1.1.1
pytz==2024.2
setuptools==75.8.0
SQLAlchemy==2.0.37
typing_extensions==4.12.2
virtualenv==20.29.1
webargs==8.6.0
Werkzeug==3.1.3

enter image description here

python flask sqlalchemy flask-sqlalchemy
1个回答
0
投票

要么将 default 与 python 函数一起使用,要么将 server_default 与 SQL 函数一起使用(在我看来)(https://docs.sqlalchemy.org/en/20/core/metadata.html#sqlalchemy.schema.Column。 params.server_default

所以:

created_at = Column(DateTime(timezone=True), server_default=text('NOW()')), nullable=False)
最新问题
© www.soinside.com 2019 - 2025. All rights reserved.