如何使用django将数据更新到sql数据库中的表中

时间:2014-11-17 09:03:05

标签: sql django python-2.7

我在django教程书中了解了数据库概念。我对从sql数据库服务器中的表中获取数据有一些疑问。在django书中,他们解释了类似这样的过滤数据,如下所示

Entry.objects.filter(pub_date__year=2007).update(headline='Everything is the same')

这里的Entry是在models.py文件中定义的类名,如下所示

models.py

class Entry(models.Model):
   blog = models.ForeignKey(Blog)
   headline = models.CharField(max_length=255)
   body_text = models.TextField()
   pub_date = models.DateField()
   mod_date = models.DateField()
   authors = models.ManyToManyField(Author)
   n_comments = models.IntegerField()
   n_pingbacks = models.IntegerField()
   rating = models.IntegerField()

   def __str__(self):              # __unicode__ on Python 2
       return self.headline

在上面的方法中没有提到要修改的表。然后在下面的查询中修改哪个表。

  Entry.objects.filter(pub_date__year=2007).update(headline='Everything is the same')

如果我问错了,请原谅我。任何人都可以清除我的怀疑。

2 个答案:

答案 0 :(得分:2)

来自the docs on table names

  

为了节省您的时间,Django会自动从模型类的名称和包含它的应用程序中派生数据库表的名称。模型的数据库表名称是通过将模型的“app label”(您在manage.py startapp中使用的名称)加入模型的类名称,并在它们之间加下划线来构建的。

     

例如,如果您有一个应用书店(由manage.py startapp bookstore创建),则定义为类Book的模型将具有名为bookstore_book的数据库表。

     

要覆盖数据库表名,请使用Meta。类中的db_table参数。

如果使用您列出的API,则无需知道表名称:

Entry.objects.filter(pub_date__year=2007).update(headline='Everything is the same')

由于您引用的模型,Django将知道要更新的表。

答案 1 :(得分:1)

表的名称由模型参数“table_name”确定。如果您没有指定它,django会自动从模型类的名称和包含它的应用程序派生数据库表的名称:https://docs.djangoproject.com/en/dev/ref/models/options/#db-table

如果您的问题是关于在django中执行SQL查询,这将有所帮助:https://docs.djangoproject.com/en/dev/topics/db/sql/