首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >django模型使用数据库服务器时间

django模型使用数据库服务器时间
EN

Stack Overflow用户
提问于 2013-10-07 15:40:00
回答 2查看 847关注 0票数 1

我在不同的位置有两台独立的django服务器和一台mysql服务器

使用django模型,当尝试创建/更新对象时(如下代码所示)。结果都是具有相同django服务器本地时间值的3列。如何获取数据库服务器的本地时间时,这样做。

我的模型:

代码语言:javascript
复制
class Test(models.Model):
    id = models.AutoField(primary_key = True, null = False)
    create = models.DateTimeField(auto_now_add=True)
    update = models.DateTimeField(auto_now=True)
    test = models.DateTimeField(null=True)

我的代码:

代码语言:javascript
复制
y = Test()
y.test = datetime.now()
y.save()

结果

代码语言:javascript
复制
    id  create               update               test                  
------  -------------------  -------------------  ------------------- 
     6  2013-10-07 06:57:04  2013-10-07 06:57:04  2013-10-07 06:57:04  
EN

回答 2

Stack Overflow用户

发布于 2013-10-07 15:59:48

我认为如果不设置数据库时区,您就不能做您想做的事情。让我们来看看你们每个日期的含义:

代码语言:javascript
复制
create = models.DateTimeField(auto_now_add=True)

它会自动将日期设置为您添加它的时间。

代码语言:javascript
复制
update = models.DateTimeField(auto_now=True)

它会自动将日期设置为您启动进程( web进程或命令)的时间。

代码语言:javascript
复制
test = models.DateTimeField(null=True)
...
y.test = datetime.now()

它将日期设置为进程的时间( Django进程运行的时间)。

要获取数据库时间,您可以将数据库的时区存储在设置中,并在必要时使用它。您不能为此使用任何自动生成的字段。

另一种解决方案是在数据库上手动抓取本地时间(通过原始查询)。

票数 1
EN

Stack Overflow用户

发布于 2013-10-07 16:29:10

如果您在Django中处理此问题,django将在将数据保存到数据库之前设置这些字段。在这种情况下,Django将根据您的应用服务器( django运行的服务器)设置时间。

您必须对MySql安装进行一些设置(如果尚未设置)。然后,您必须在数据库中重新创建表或更改它们(我猜Django模型定义无法处理此问题)。这是一个how-to doc explaning these settings

示例sql CREATE TABLE语句如下所示

代码语言:javascript
复制
CREATE TABLE test_test (
    create DATETIME DEFAULT CURRENT_TIMESTAMP,
    update DATETIME DEFAULT 0 ON UPDATE CURRENT_TIMESTAMP
)

如果您已经在yotr表中有数据,那么您可以执行ALTERs而不是重新创建表。

然后,您必须编辑您的模型并将相关的日期时间字段设置为null,以便MySql可以设置它们。

代码语言:javascript
复制
class Test(models.Model):
    id = models.AutoField(primary_key = True, null = False)
    create = models.DateTimeField(null=True)
    update = models.DateTimeField(null=True)
    test = models.DateTimeField(null=True)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19219350

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档