Django ORM,将 None 日期时间作为 0 插入 MySQL

2024-03-28

我有一个 MySQL 数据库,除了 Django 之外,还被另一个应用程序使用。该应用程序使用'0000-00-00 00:00:00'作为日期时间的默认值。

Django (v1.5.5) 解释'0000-00-00 00:00:00'日期时间为None当读取数据库时None as NULL写入数据库时​​。这会导致错误,因为数据库将该字段定义为NOT NULL.

手动设置:

model.datetime = '0000-00-00 00:00:00'

不起作用,因为 Django 认为这是一个无效日期。

如何创建插入的自定义日期时间字段None as '0000-00-00 00:00:00'?


基于Seppo的解决方案(由于缺少connection.ops.value_to_db_datetime,该解决方案不适用于django 1.9.4),我最终使用了自定义DateTimeField,如下所示:

from django.db import models

class ZeroDateTimeField(models.DateTimeField):
    def get_db_prep_value(self, value, connection, prepared=False):
        value = super( ZeroDateTimeField, self ).get_db_prep_value( value, connection, prepared )
        if value is None:
            return  "0000-00-00 00:00:00"
        return value

然后只需在模型中使用 ZeroDateTimeField 而不是 DateTimeField。

工作起来就像一个魅力,我不得不告诉客户修复他的 mysql 数据库;-)

编辑:我最终重写了构造函数来设置 null=True 和 Blank=True 以方便使用自动生成的模型。由于这可能对某些人有用,因此如下(这是可选的且有问题的):

def __init__(self, verbose_name=None, name=None, auto_now=False, auto_now_add=False, **kwargs):
    kwargs['null'] = True
    kwargs['blank'] = True
    super( ZeroDateTimeField, self ).__init__(verbose_name, name, auto_now, auto_now_add, **kwargs)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Django ORM,将 None 日期时间作为 0 插入 MySQL 的相关文章

  • Django - 在设置中使用反向 url 映射

    例如 django 设置文件中的一些选项是 urlLOGIN URL and LOGIN REDIRECT URL 是否可以避免对这些 url 进行硬编码 而使用反向 url 映射 目前 这确实是我发现自己在多个地方编写相同网址的唯一地方
  • 在 pytest 中参数化并运行单个测试

    如何从配置了参数化的集合中运行单个测试 假设我有以下测试方法 pytest mark parametrize PARAMETERS LIST PARAMETERS VALUES def test my feature self param1
  • 在 Django 中使用“.filter().filter().filter()...”有缺点吗?

    以下两个调用是否解析为 Django 中的等效 SQL 查询 链接多个调用 Model objects filter arg1 foo filter arg2 bar 将所有参数包装在一起 Model objects filter arg1
  • 如何创建具有两个主键和两个外键的表?

    create table Machine Machine ID int primary key Machine Name varchar 30 Machine Title varchar 30 create table Part Part
  • Python 的局限性是什么? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 我花了几天时间阅读有关 C 和 Python 的内容 发现 Python 非常简单且易于学习 所以我想知道它真的值得花时间学习吗 或者我应该花时
  • 在 MySQL 中存储 IPv6 地址

    正如 需要支持 ipv6 的 inet aton 和 inet ntoa 函数 http bugs mysql com bug php id 34037 目前没有用于存储 IPv6 地址的 MySQL 函数 用于存储 插入的推荐数据类型 函
  • python3导入找不到模块

    我正在尝试测试书中的一个例子 我得到了一个ImportError 该示例开始如下 from tkinter import from PP4E Gui Tools widgets import frame button entry 如果我放一
  • py2exe + sqlalchemy + sqlite 问题

    在进入全速开发模式之前 我正在尝试让一些基本的东西在 Python 中工作 具体如下 Python 2 5 4 PyQt4 4 4 3 SqlAlchemy 0 5 2 py2exe 0 6 9 setuptools 0 6c9 pysql
  • 无法在 AWS Lambda 上使用请求模块

    我需要在每天运行一次的 python 脚本中进行休息调用 我无法使用 AWS Lambda 将 requests 包打包到我的 python 包中 我收到错误 无法导入模块 lambda function 没有名为 lambda funct
  • 如何使用计划库运行异步函数?

    我正在使用discord py rewrite 编写一个discord 机器人 并且我想每天在特定时间运行一个函数 我对异步函数完全没有经验 而且我无法弄清楚如何在不使用 await 的情况下运行异步函数 这只是我的一段代码 这就是为什么有
  • 如何在Python 2.7中访问ODB文件

    我想在 Python 中访问 ODB 文件 使用 LibreOffice Base 创建 并提取一个表以供进一步使用 ODB包含多个表 一种关系设计和多种表单 是否可以在不使用任何 SQL 的情况下实现这一目标 Edit 由于我自己解析这种
  • python lxml 我如何在项目名称中使用标签?

    我需要使用项目的特殊名称构建 xml 文件 这是我当前的代码 from lxml import etree import lxml from lxml builder import E wp E wp tmp wp title print
  • 我可以在 python 中获得没有 echo 的控制台输入吗?

    我可以在 python 中获取没有 echo 的控制台输入吗 Use getpass http docs python org library getpass html gt gt gt from getpass import getpas
  • Python Asyncio 子进程永远不会完成

    我有一个简单的 python 程序 我用它来测试带有子进程的 asyncio import sys time for x in range 100 print processing s 100 x sys stdout flush prin
  • 如何将一个不相连的networkx图分成多个相互不相交但相连的图?

    我有一个networkx Graph代表一个对象graph https en wikipedia org wiki Graph discrete mathematics whose nodes https en wikipedia org
  • 将时间戳合并到自定义时间段中

    我对熊猫相当陌生 并且遇到了障碍 我有一个包含时间戳的数据帧 我想在我的数据框中添加一列 其中包含自定义期间名称 字符串 例如 df pd DataFrame pd date range 01 01 00 00 periods 72 fre
  • AttributeError:“HTTPResponse”对象没有属性“split”

    我试图从谷歌财经获取一些信息 但我收到此错误 AttributeError HTTPResponse 对象没有属性 split 这是我的Python代码 import urllib request import urllib from bs
  • Python:Pycharm 运行时

    我目睹了 PyCharm 的一些奇怪的运行时问题 解释如下 该代码已在具有 20 个内核和 256 GB RAM 的机器上运行 并且有足够的空闲内存 我没有展示任何实际功能 因为它是一个相当大的项目 但我非常乐意根据要求添加详细信息 简而言
  • 为调色板图像分配不同的调色板索引

    我正在用 Python 和 Pygame 编写游戏 为此 图形将采用旧视频游戏机 如 NES 的风格 因此 图形由具有 2 位 4 色 图像的单个图块集文件组成 我希望在加载这些图像时能够为这些图像分配任意 4 色调色板 我想要做的是使用
  • REQ/REP 模式中的 ZeroMQ FiniteStateMachineException

    我有两个简单的组件 它们应该使用 REQ REP ZeroMQ 模式相互通信 服务器 REP Socket 是使用 pyzmq 在 Python 中实现的 import zmq def launch server print Launchi

随机推荐