Django没有附加表?

2024-05-17 18:37:33 发布

您现在位置:Python中文网/ 问答频道 /正文

有没有可能编写Django应用程序,例如在现有数据库中用于内部/个人使用,而不需要Djangos自己的表的“开销”,而这些表通常是在启动项目时安装的?我想通过模型使用现有的表,但不是有所有其他的东西,肯定是有用的正常网页。在

原因是为了建立小型的个人检查/管理工具,而不是侵入遗留数据库。在


Tags: 项目django模型数据库应用程序网页原因管理工具
3条回答

Django本身不安装任何表。它附带了一些预制的应用程序,可以安装表,但是通过从INSTALLED_APPS设置中删除表,这些应用程序很容易被禁用。在

定义了数据库表的最引人注目的应用程序是django.contrib.auth,它在数据库中实现自己的auth后端。如果你的应用被防火墙保护,并且你信任所有有权访问它的人,你可能会一起跳过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,因为它可能会做一些不希望的事情。在

您还可以添加一个额外的数据库(将其设置为默认值),以便将额外的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' }, }

相关问题 更多 >