图书推荐系统(五)之数据导入到数据库
将获取的数据保存到数据库中
1、准备user的数据导入
(1)prepare.py
# -*- coding: utf-8 -*-
"""
Author: JinHelen
Date:2019-04-21
Desc:准备user的数据导入mysql
"""
import os,django
#存放所有的环境变量,目的是为了任何一个django project中的*.py文件都能够正常的使用项目中的数据模型操作
os.environ["DJANGO_SETTINGS_MODULE"]="Book.settings"
django.setup()
"""
上边import 解决错误:
django.core.exceptions.ImproperlyConfigured: Requested setting INSTALLED_APPS, but settings are not
django.core.exceptions.AppRegistryNotReady: Apps aren't loaded yet.
"""
from user.models import User
user_path = "../data/select_users.txt"
pwd = "123456"
for line in open(user_path,"r"):
uname = line.strip()
User(username=uname,password=pwd,isnewuser=False).save()
print("User 信息导入数据库完成,密码全部初始化为123456,是否是新注册用户初始化为False!")
(2)index/models.py
#-*- coding: utf-8 -*-
from django.db import models
# Create your models here.
class User(models.Model):
# 用户名和密码
# blank=True,那么 Django 的管理后台就允许该字段填写空值;verbose_name:提供自述名
username = models.CharField(blank=True,verbose_name="用户名",unique=True,max_length=20)
password = models.CharField(blank=True,verbose_name="密码",max_length=6,default="123456")
regtime = models.DateTimeField(verbose_name="注册时间",auto_now=True)
isnewuser = models.BooleanField(blank=True,verbose_name="是否注册用户",default=True)
# 输出object调用str()时应返回的值
def __str__(self):
return self.username
#定义模型的元数据(任何不是字段的数据),里面的选项不是必须的
class Meta:
#该模型所使用的数据库表的名称
db_table = 'user'
#该对象复数形式的名称
verbose_name_plural = "用户表"
2、准备book的数据导入mysql
(1)prepare_book_mess.py
# -*- coding: utf-8 -*-
"""
Author: JinHelen
Date:2019-04-15
Desc:准备book的数据导入mysql
"""
import os,django
os.environ["DJANGO_SETTINGS_MODULE"]="Book.settings"
django.setup()
"""
上边import 解决错误:
django.core.exceptions.ImproperlyConfigured: Requested setting INSTALLED_APPS, but settings are not
django.core.exceptions.AppRegistryNotReady: Apps aren't loaded yet.
"""
from index.models import Book
# 图书信息表
book_mess_pass = "../data/book_mess.txt"
# 写入数据库
_have_write_ids = list()
for line in open(book_mess_pass,"r",encoding='utf-8'):
bookid,bookname,bookimg,bookscore,booktag = line.strip().split("\t")
if bookscore == "":
bookscore = 1.0
else:
bookscore = float(bookscore)
#爬取过程中数据有重复
if bookid in _have_write_ids:
print("该图书信息({})已经写入数据库".format(bookid))
continue
else:
Book(bookid=bookid, bookname=bookname, bookimg = bookimg, bookscore=bookscore, booktag=booktag).save()
_have_write_ids.append(bookid)
print("图书信息写入数据库完成!")
(2)index/models.py
# -*- conding:utf-8 -*-
from django.db import models
# Create your models here.
# 图书信息类
"""
4758387 并州迷雾 https://img1.doubanio.com/view/subject/l/public/s4377217.jpg 7.4 狄仁杰,推理,悬疑,小说,安娜芳芳,中国,同人作品,神探狄仁杰
"""
class Book(models.Model):
bookid = models.CharField(blank=True, verbose_name="图书ID", unique=True, max_length=20)
bookname = models.CharField(blank=True, verbose_name="图书名字", max_length=100)
bookimg = models.CharField(blank=False, verbose_name="图书封面链接", max_length=300)
bookscore = models.FloatField(blank=False, verbose_name="图书评分", default=1.0)
booktag = models.CharField(blank=True, verbose_name="图书标签", unique=False, max_length=400)
def __str__(self):
return self.bookname
def tag_split(self):
return self.booktag.split(",")
class Meta:
db_table = "bookmess"
verbose_name_plural = "图书信息表"
# 图书评分表
class BookScore(models.Model):
userid = models.CharField(blank=True, verbose_name="用户ID", max_length=20)
bookid = models.CharField(blank=True, verbose_name="图书ID", max_length=20)
bookscore = models.FloatField(blank=True, verbose_name="用户对图书的评分")
actiontime = models.DateTimeField(verbose_name="评分时间", auto_now=True)
def __str__(self):
return self.userid
class Meta:
db_table = 'bookscore'
verbose_name_plural = "图书评分表"