我在不同的位置有两台独立的django服务器和一台mysql服务器
使用django模型,当尝试创建/更新对象时(如下代码所示)。结果都是具有相同django服务器本地时间值的3列。如何获取数据库服务器的本地时间时,这样做。
我的模型:
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)我的代码:
y = Test()
y.test = datetime.now()
y.save()结果
id create update test
------ ------------------- ------------------- -------------------
6 2013-10-07 06:57:04 2013-10-07 06:57:04 2013-10-07 06:57:04 发布于 2013-10-07 15:59:48
我认为如果不设置数据库时区,您就不能做您想做的事情。让我们来看看你们每个日期的含义:
create = models.DateTimeField(auto_now_add=True)它会自动将日期设置为您添加它的时间。
update = models.DateTimeField(auto_now=True)它会自动将日期设置为您启动进程( web进程或命令)的时间。
test = models.DateTimeField(null=True)
...
y.test = datetime.now()它将日期设置为进程的时间( Django进程运行的时间)。
要获取数据库时间,您可以将数据库的时区存储在设置中,并在必要时使用它。您不能为此使用任何自动生成的字段。
另一种解决方案是在数据库上手动抓取本地时间(通过原始查询)。
发布于 2013-10-07 16:29:10
如果您在Django中处理此问题,django将在将数据保存到数据库之前设置这些字段。在这种情况下,Django将根据您的应用服务器( django运行的服务器)设置时间。
您必须对MySql安装进行一些设置(如果尚未设置)。然后,您必须在数据库中重新创建表或更改它们(我猜Django模型定义无法处理此问题)。这是一个how-to doc explaning these settings
示例sql CREATE TABLE语句如下所示
CREATE TABLE test_test (
create DATETIME DEFAULT CURRENT_TIMESTAMP,
update DATETIME DEFAULT 0 ON UPDATE CURRENT_TIMESTAMP
)如果您已经在yotr表中有数据,那么您可以执行ALTERs而不是重新创建表。
然后,您必须编辑您的模型并将相关的日期时间字段设置为null,以便MySql可以设置它们。
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)https://stackoverflow.com/questions/19219350
复制相似问题