我在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')
如果我问错了,请原谅我。任何人都可以清除我的怀疑。
答案 0 :(得分:2)
为了节省您的时间,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/