gpt4 book ai didi

mysql - Django 相当于 SqlAlchemy 的literal_column

转载 作者:行者123 更新时间:2023-11-29 13:57:07 24 4
gpt4 key购买 nike

尝试将一些 SqlAlchemy 移植到 Django,但我遇到了这个棘手的问题:

version = Column(
BIGINT,
default=literal_column(
'UNIX_TIMESTAMP() * 1000000 + MICROSECOND(CURRENT_TIMESTAMP)'
),
nullable=False)

literal_column 位移植到 Django 的最佳选择是什么?到目前为止我得到的最好的想法是设置一个执行相同原始sql的默认函数,但我不确定是否有更简单的方法?我的 google-foo 在那里失败了。

编辑:我们需要使用 mysql 创建的时间戳的原因是我们正在测量某些内容的过时程度(因此我们需要实际知道时间),并且为了正确性,我们希望,只有一个时间戳权限(这样我们就不会使用查看系统时间的 python 函数引入错误,系统时间可能在不同的服务器上有所不同)。

目前我有:

def get_current_timestamp(self):
cursor = connection.cursor()
cursor.execute("SELECT UNIX_TIMESTAMP() * 1000000 + MICROSECOND(CURRENT_TIMESTAMP)")
row = cursor.fetchone()
return row

version = models.BigIntegerField(default=get_current_timestamp)

在这一点上,这听起来是我最好/唯一的选择。

最佳答案

如果您不关心拥有中央时间权威:

import time

version = models.BigIntegerField(
default = lambda: int(time.time()*1000000) )

按照您的意愿改变数据库:

from django.db.models.expressions import ExpressionNode

class NowInt(ExpressionNode):
""" Pass this in the same manner you would pass Count or F objects """

def __init__(self):
super(Now, self).__init__(None, None, False)

def evaluate(self, evaluator, qn, connection):
return '(UNIX_TIMESTAMP() * 1000000 + MICROSECOND(CURRENT_TIMESTAMP))', []

### Model

version = models.BigIntegerField(default=NowInt())

由于表达式节点不可调用,因此表达式将在数据库端求值。

关于mysql - Django 相当于 SqlAlchemy 的literal_column,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15671855/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com