有没有可能编写Django应用程序,例如用于内部/个人使用现有的数据库,而不需要Djangos自己的表的‘开销’,而这些表通常是在启动项目时安装的?我想通过模型使用现有的表格,但没有所有其他在正常网页上肯定有用的东西。
原因是要构建小型的个人检查/管理工具,而不会侵扰遗留数据库。
发布于 2009-08-21 18:36:12
最值得注意的是定义了数据库表的django.contrib.auth,它在数据库中实现了自己的身份验证后端。如果你的应用程序被防火墙保护了,并且你信任所有可以访问它的人,你可能会一起跳过身份验证。如果不是这样,你想使用现有的基础设施创建自己的身份验证机制,你很可能想要使用另一个后端。如果你的web服务器设置了REMOTE_USER,你可以使用another builtin backend,并且你应该关闭并运行。否则,您将不得不实现您自己的来引用其他身份验证源。
在此基础上,您只需将模型设置为使用现有的数据库表,而不是让它们自己创建。例如,您可以对此进行非常精细的控制
class MyModel(django.db.Model):
MyTextField = django.db.TextField(db_column="mytextfield", primary_key=True)
class Meta:
db_table = "my_table"这样,您就可以指定每个模型的每个字段所表示的确切的表和列。请注意,您可以将主键设置为整数以外的类型。django的ORM的一个限制是每个模型必须恰好有一个主键。因此,如果您的表没有主键,要么添加一个主键,要么在没有django的ORM帮助的情况下继续下去。
此外,由于您正在绑定一个现有的数据集,可能与其他应用程序相关,因此您不太可能想要使用./manage.py syncdb,因为它可能会做一些不受欢迎的事情。
发布于 2009-08-21 18:03:51
Django本身不会安装任何表。它附带了一些预制的应用程序,这些应用程序可以安装表,但可以通过从INSTALLED_APPS设置中删除它们来轻松禁用这些应用程序。
发布于 2010-07-06 21:57:27
您也可以添加一个额外的数据库(设置为默认)来保存额外的django开销:
DATABASES = {
'default': {
'ENGINE' : 'django.db.backends.sqlite',
'NAME' : 'djangoOverhead',
'USER' : '',
'PASSWORD' : '',
'HOST' : 'localhost' },
'legacyAppTables': {
'ENGINE' : 'django.db.backends.mysql',
'NAME' : 'legacyAppTables',
'USER' : '',
'PASSWORD' : '',
'HOST' : 'someRemoteHost' }, }https://stackoverflow.com/questions/1313362
复制相似问题