我知道这存在
django-admin.py inspectdb > models.py
然而,是否有一种简单的方法来限制它?无需手动删除我不想要的内容。
我正在连接到一个有超过一百个表的数据库,但我只想要大约4或5的模型。是否有一种简单的方法可以从几个给定的表生成模型?
它们是相当大的表,所以我不想把它们全部输入。
答案 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命令在命令行上获取可选的表列表,以限制要检查的表。