django1.11.4 从mysql中同步已存在的表,自动创建models

1.将mysql中的表同步到models中

在项目目录下执行:
python manage.py inspectdb #查看现有的模型文件(models.py)
python manage.py inspectdb > models.py #直接同步也没有问题

2.views.py 中 从models引入表对应的类

from wordcloud.models import Sc20170811 
names=Sc20170811.objects.all()[:10] 取前十个
# print (str(Sc20170811.objects.all()[:10].query)) 会在启动服务器的cmd处打印当前的查询语句

得到的names 可以和其它变量一样通过context 传递到html中

对应完整代码:

views.py
from django.http import HttpResponse
from django.template import loader,Context
from wordcloud.models import Sc20170811 
# Create your views here.
def index(requests):
    template  = loader.get_template('wordcloud.html')
    names=Sc20170811.objects.all()[:10] 
    print (str(Sc20170811.objects.all()[:10].query))
    print(type(names))

    context  = { "value":"我是标题",'names':names}
    return HttpResponse(template.render(context))

3 html文件中从以变量形式取值

{% for name in names %}
<p>{{name.title}}
<br>
{% endfor %}

4.一些细节内容:

查询语句:
print (str(Sc20170811.objects.all()[:10].query))对应下面

SELECT `sc_20170811`.`id`, `sc_20170811`.`leading_title`, `sc_20170811`.`title`, `sc_20170811`.`subtitle`, `sc_20170811`.`link`, `sc_20170811`.`writeTime`, `sc_20170811`.`source`, `sc_20170811`.`section`, `sc_20170811`.`author`, `sc_20170811`.`news`, `sc_20170811`.`updated` FROM `sc_20170811` LIMIT 10

报错解决过程:
中间有报错说 unkonwn column sc_20170811.id,后来自己手动在数据库增加一个id字段,运行python manage.py inspectdb > models.py从数据库同步到models之后,数据被取出来了一次,过后又报错。说id必须为主键,但是我刚插入的字段不可能为主键的。(记录太多)于是又删除了id字段,从数据库同步到models,终于恢复正常。

报错信息:

  • wordcloud.Sc20170811: (models.E004) ‘id’ can only be used as a field
    name if the field also sets ‘primary_key=True’.

  • unkonwn column sc_20170811.`id

5.参考资料:
Django QuerySet API
jango QuerySet 进阶
Django读取Mysql数据并显 示在前端(版本不一致,有很大区别)
官方文档:Integrating Django with a legacy database¶

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值