从 Django 中的现有数据库生成一些模型
我知道这种情况存在
django-admin.py inspectdb > models.py
但是,有没有简单的方法来限制它?无需手动删除我不想要的内容。
我正在连接到一个拥有一百多个表的数据库,但我只想要大约 4 或 5 个表的模型。是否有一种简单的方法可以从几个给定的表生成模型?
它们是相当大的桌子,所以我也不喜欢把它们全部打出来。
I know this exists
django-admin.py inspectdb > models.py
However, is there an easy way to limit it? Without manually deleting what I don't want.
I'm connecting to a database that has over one hundred tables, but I only want models of about 4 or 5. Is there an easy way to generate models from a few given tables?
They are quite big tables, so I don't fancy typing them all out either.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
我自己也是这样做的,也是与 Oracle 一起做的。这是可能的——但并不美好。
假设您知道所需表的名称 -
打开 django/db/backends/oracle/introspection.py 。有一个函数
get_table_list
:只需将其替换为类似的
然后运行您的
inspectdb
,它将更易于管理:)I just did this myself, also with Oracle. It's possible - but not pretty.
Assuming you know the names of the tables you want -
open
django/db/backends/oracle/introspection.py
. There is a functionget_table_list
:Just replace it with something like
Then run your
inspectdb
and it will be a lot more managable :)不要使用syncdb>模型.py。这不是一个好的做法。手动创建模型并向其中添加
management=False
。如果您不添加它,则可以通过单个命令删除所有数据库表。创建模型后,运行syncdb
以便链接表。Do not use
syncdb > models.py
. It's not a good practice. Make your models manually and addmanaged=False
to it. If you will not add it your all database tables can be deleted via single command. After creating your models then run thesyncdb
so that tables are linked.@pfctdayelise 给出的以下解决方案
对于
django 1.8
mysql 后端打开
django/db/backends/mysql/introspection.py
并查找函数get_table_list
:替换
要确定
TableInfo
的第二个参数是t
还是v
,请运行 mysql 查询SHOW FULL TABLES code> 并找出您的
table_type
如果它是BASE_TABLE
那么第二个参数是t
elsev
然后运行
Following solution given by @pfctdayelise
For
django 1.8
mysql backendopen
django/db/backends/mysql/introspection.py
and find functionget_table_list
:Replace it with something like
To decide whether the second argument to
TableInfo
ist
orv
, run the mysql querySHOW FULL TABLES
and find out yourtable_type
if it is aBASE_TABLE
then second argument ist
elsev
Then run
从 Django 1.10 开始,inspectdb 命令在命令行上采用可选的表列表来限制将检查哪些表。
Starting in Django 1.10, the inspectdb command takes an optional list of tables on the command line that limits which tables will be inspected.