Python Django—使用inspectdb时为空数据库
我正试图在以下位置查看文档: 首先,我将数据库添加到settings.py,然后键入Python Django—使用inspectdb时为空数据库,python,database,django,Python,Database,Django,我正试图在以下位置查看文档: 首先,我将数据库添加到settings.py,然后键入 python manage.py inspectdb 这是输出。对不起,时间太长了;希望你只需要看大局 我的问题是 1) 我不知道如何将某些内容放入数据库(当我用文本编辑器打开数据库时,它只是随机字符) 2) 如果运行python manage.py sqlcustom[app name],则不会输出任何内容 3) 很可能是上述两种情况的结果,导入的数据库在Django中显示为空。当我在shell中键入Bon
python manage.py inspectdb
这是输出。对不起,时间太长了;希望你只需要看大局
我的问题是
1) 我不知道如何将某些内容放入数据库(当我用文本编辑器打开数据库时,它只是随机字符)
2) 如果运行python manage.py sqlcustom[app name],则不会输出任何内容
3) 很可能是上述两种情况的结果,导入的数据库在Django中显示为空。当我在shell中键入Bonds.objects.all()时,它会返回一个空列表,而应该有很多(我已经确认了)
你按照其余的指示走了吗?您需要将
inspectdb
的输出添加到某个应用程序中的models.py
文件中,然后将该应用程序添加到您的已安装的应用程序中
请尝试以下操作:
1) 创建一个应用程序
如果没有要将inspectdb
的输出放入的应用程序,只需运行python manage.py startapp legacy
。这将创建一个名为legacy
的应用程序,您可以通过该应用程序同步现有数据库
2) 将inspectdb输出添加到应用程序的模型文件
在所选应用程序的models.py
文件中,粘贴inspectdb
命令的输出。最简单的方法可能是运行python manage.py inspectdb>models.py
。这将在具有manage.py
和您的应用程序目录的同一目录中创建名为models.py
的文件。将该文件的输出复制到应用程序中的models.py
文件中,即legacy/models.py
3) 将您的应用添加到已安装的应用
在您的settings.py
中,将您的应用程序添加到已安装的应用程序中。在本例中,您希望将'legacy',
添加到已安装的应用程序中
4) 运行syncdb
运行python manage.py syncdb
以确保包含所有必需的表。看起来您已经有了基于上面粘贴的输出的结果,但是再次运行它不会有什么坏处。我找到了答案,这是一个显而易见的答案:数据库路由。您需要创建一个routers.py
文件,并将其添加到设置.py
:
DATABASE_ROUTERS = ['myapp1.routers.name-of-your-routers.py-class',
'myapp2.routers.name-of-your-routers.py-class']
DATABASE_APPS_MAPPING = {'myapp1': 'mydb1',
'myapp2':'mydb2'}
Djangosnippets具有routers.py
文件:
您需要在models.py中的每个类的Meta类中添加一个名为的属性,该属性位于\u db='desired db'
,谢谢您的回复。我已经完成了这些步骤,只不过我只是在应用程序中复制粘贴了输出。您是否将其放入应用程序的models.py
文件中?只是注意到您的一些模型缺少Django所需的主键。不确定这是否是您的问题,但尝试将id=models.AutoField(primary\u key=True)
添加到那些没有pk的模型中。很好。不幸的是,问题仍然存在。我猜b/c添加该行实际上并不会将db更改为添加pk。你能编辑这个数据库吗?可能进入sql
code,为缺少它们的模型添加一个pk
字段,然后再次运行inspectdb
。
DATABASE_ROUTERS = ['myapp1.routers.name-of-your-routers.py-class',
'myapp2.routers.name-of-your-routers.py-class']
DATABASE_APPS_MAPPING = {'myapp1': 'mydb1',
'myapp2':'mydb2'}