从Django中的现有数据库生成一些模型

时间:2010-03-30 18:25:48

标签: django django-models django-database

我知道这存在

django-admin.py inspectdb > models.py

然而,是否有一种简单的方法来限制它?无需手动删除我不想要的内容。

我正在连接到一个有超过一百个表的数据库,但我只想要大约4或5的模型。是否有一种简单的方法可以从几个给定的表生成模型?

它们是相当大的表,所以我不想把它们全部输入。

4 个答案:

答案 0 :(得分:7)

我自己也是这样做的,也是Oracle的。这是可能的 - 但不是很漂亮。

假设您知道所需表格的名称 -

打开django/db/backends/oracle/introspection.py。有一个函数get_table_list

def get_table_list(self, cursor):
    "Returns a list of table names in the current database."
    cursor.execute("SELECT TABLE_NAME FROM USER_TABLES")
    return [row[0].lower() for row in cursor.fetchall()]

只需将其替换为

def get_table_list(self, cursor):
    names = ['mytable1', 'mytable2', 'mytable3']
    return names

然后运行你的inspectdb,它将更加可管理:)

答案 1 :(得分:0)

请勿使用syncdb > models.py。这不是一个好习惯。手动制作模型并向其添加managed=False。如果不添加它,可以通过单个命令删除所有数据库表。创建模型后,运行syncdb以便链接表。

答案 2 :(得分:0)

遵循@pfctdayelise提供的解决方案

对于Panel mysql后端

打开django 1.8并找到函数django/db/backends/mysql/introspection.py

get_table_list

将其替换为

def get_table_list(self, cursor):
    cursor.execute("SHOW FULL TABLES")
    return [TableInfo(row[0], {'BASE TABLE': 't', 'VIEW': 'v'}.get(row[1]))
            for row in cursor.fetchall()]

要确定def get_table_list(self, cursor): names = [TableInfo('mytable1', 't')] return names 的第二个参数是TableInfo还是t,请运行mysql查询v并查找SHOW FULL TABLES是否为table_type BASE_TABLE然后第二个参数是t其他v

然后运行

python manage.py inspectdb > models.py

答案 3 :(得分:0)

从Django 1.10开始,inspectdb命令在命令行上获取可选的表列表,以限制要检查的表。