我有一个位于/home/pi/Desktop/Databsaes/data.db
的sqlite数据库,希望从我的models.py
脚本访问它。
要在普通命令提示符下查看表内容,我将执行:
sqlite3
sqlite> .open data.db
sqlite> SELECT * from table1
我一直在阅读此official tutorial,但不了解如何访问我的本地数据库并执行上述操作。
在SQL术语中,QuerySet等同于SELECT语句,
...但是如何直接在我的models.py
脚本中执行类似的操作?
Models.py仍未更改:
from __future__ import unicode_literals
from django.db import models
# Create your models here
根据我收集的信息,可能会使用字段查找,这些查找为QuerySet
方法(例如get()
)指定参数。
编辑
我遵循此tutorial的操作,将数据库导入Django。
但是我的问题是:在导入后,从Django端可以看到通过单独的进程添加到该数据库的新数据吗?
如果您确实希望允许Django管理表的生命周期,则需要将上方的托管选项更改为True(或直接删除,因为True是其默认值)。
我不知道“管理表的生命周期”是否意味着一旦添加了新数据就更新数据库。
答案 0 :(得分:1)
我认为managed=False
的声明可能是使您感到困惑的要点。这是Model._meta.managed
上的说明:
如果为False,则不会对此模型执行数据库表创建或删除操作。如果模型表示通过其他某种方式创建的现有表或数据库视图,则此功能很有用。当managed = False时,这是唯一的区别。模型处理的所有其他方面与正常情况完全相同。这包括
这意味着对于使用makemigrations
修改模型架构,将不会(通过managed=False
)生成新的迁移。这意味着您要告诉Django,“我不会通过Django更改这些模型的架构”(但可以通过其他方式,也可以通过其他服务来更改)。
请注意,我们所讨论的只是对更改架构> 的影响,与您的真实数据无关。建立数据库和Django模型的链接后,就像@DanielRoseman的注释一样,Django每次查询都会看到其中的任何数据。
由于根据您的陈述,问题是针对新添加的数据,因此答案应为是。但是,如果您的意思是要通过其他服务(而不是通过上面的Django服务)创建新表,那么您当然仍然必须将相应的模型添加到Django(使用managed=False
)中,然后就可以访问数据通过Django。