4

我知道这存在

django-admin.py inspectdb > models.py

但是,有没有简单的方法来限制它?无需手动删除我不想要的内容。

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

它们是相当大的桌子,所以我也不喜欢把它们都打出来。

4

4 回答 4

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,它会更易于管理:)

于 2010-08-19T06:13:18.013 回答
0

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

于 2010-04-01T10:33:18.097 回答
0

遵循@pfctdayelise 给出的解决方案

对于django 1.8mysql 后端

打开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

要确定第二个参数TableInfotor v,运行 mysql 查询SHOW FULL TABLES并找出你的table_type如果它是BASE_TABLE第二个参数是telsev

然后运行

python manage.py inspectdb > models.py
于 2016-03-12T15:28:09.507 回答
0

从 Django 1.10 开始,inspectdb 命令在命令行上采用一个可选的表列表,用于限制要检查的表。

于 2018-09-19T16:09:15.840 回答