Django没有附加表?

时间:2009-08-21 17:56:13

标签: python django database

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

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

5 个答案:

答案 0 :(得分:3)

Django本身不安装任何表。它附带了一些预制应用程序,可以安装表格,但可以通过从INSTALLED_APPS设置中删除它们来轻松禁用它们。

答案 1 :(得分:2)

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

答案 2 :(得分:1)

定义了数据库表的最值得注意的应用是django.contrib.auth,它在数据库中实现了自己的auth后端。如果您的应用程序是防火墙的,并且您信任所有可以访问它的人,您可以一起跳过auth。否则,您希望使用现有基础架构创建自己的身份验证机制,您很可能想要使用另一个后端。如果您的网络服务器设置了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,因为它可能会执行一些不受欢迎的操作。

答案 3 :(得分:0)

不要安装任何Django的内置应用,也不要在应用中使用任何models.py。您的数据库中将包含零表。

您将没有用户,站点或会话 - 这些是使用数据库的Django功能。

但是,

AFAIK你还应该有一个SQLite数据库。我认为Django的部分假设你有一个数据库连接,它可能会尝试建立这种连接。

这是一个很容易尝试的实验。

答案 4 :(得分:0)

在项目的settings.py文件中(在项目开始时,在运行syncdb之前),请注意INSTALLED_APPS元组的 django 应用程序字符串。