作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
尝试将一些 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/
我正在使用 Flask-SQLAlchemy 和 Postgres,我有 2 个类 FacebookPost 和 TwitterPost 我想从中查询 2 列,添加第 3 列 post_type 表示
我是一名优秀的程序员,十分优秀!