首先要先把settings文件里面的数据库配置写好
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'ceshishi', #你的数据库名称
'USER': 'root', #你的数据库用户名
'PASSWORD': '234324242423424', #你的数据库密码
'HOST': '106.39.23.14', #你的数据库主机,留空默认为localhost
'PORT': '33906', #你的数据库端口
}
}
当然你也可以用默认的SQLite,那就不用配置这个了
NAME即数据库的名字,在mysql连接前该数据库必须已经创建,而上面的sqlite数据库下的db.sqlite3则是项目自动创建
USER和PASSWORD分别是数据库的用户名和密码。
设置完后,再启动我们的Django项目前,我们需要激活我们的mysql。
然后,启动项目,会报错:no module named MySQLdb
这是因为django默认你导入的驱动是MySQLdb,可是MySQLdb对于py3有很大问题,所以我们需要的驱动是PyMySQL
所以,我们只需要找到项目名文件下的__init__,在里面写入:
import pymysql
pymysql.install_as_MySQLdb()
问题解决!
ORM(对象关系映射)
from django.db import models
# Create your models here.
# class Book(models.Model):
# name = models.CharField(max_length=20)#告诉数据库存一个字符串类型,长度是20,所有的字符串类型都是CharField
# price = models.IntegerField()#存一个数字格式
# pub_data = models.DateField()#存一个日期格式
# publish = models.ForeignKey("Publish")#建立外键关联Publish表,Django会自动在字段名字后面加上_id
# authors = models.ManyToManyField("Author")
#
#
# def __str__(self):
# return self.name
# #这个表建立之后,在终端执行python manage.py makemigrations 就会在migrations文件夹中建立一张表这个表就是Book 但是还不能用,因为
# # 数据库还没有生成内容 还需要执行这个命令python manage.py migrate这样数据库就有内容了
# #右侧边栏database---“+”---dataSource---Sqllite 进去之后点击Sqllite,中间有个down下载点击下载完成之后,点击OK,
# # 回到页面把db.sqllite拖到右侧边栏中,db这个里面的文件就是我们建立的所有的表了,可以在数据库里面直接添加数据了
# # 点击菜单栏中的+去添加数据,不用提交,这个是系统会自动帮你提交
#当然mysql也是这样
rom django.db import models
# Create your models here.
class Book(models.Model):
name=models.CharField(max_length=20)
price=models.IntegerField()
pub_date=models.DateField()
publish=models.ForeignKey("Publish")#建立外键关联Publish表,Django会自动给后面加上一个_id
# authors=models.ManyToManyField("Author")#建立多对多表关系时间用的,也可以不用这个,自己建立关联表,用这个建立的话
#系统会自动帮你生成一个关联表
def __str__(self):
return self.name
class Publish(models.Model):
name=models.CharField(max_length=32)
city=models.CharField(max_length=32)
def __str__(self):
return self.name
class Book_Author(models.Model):
book=models.ForeignKey("Book")
author=models.ForeignKey("Author")
class Author(models.Model):
name=models.CharField(max_length=32)
age=models.IntegerField(default=20)
def __str__(self):
return self.name
下面这个记录的是views里面的代码,主要是一些 增删改查的用法
def indexx(request):
return render(request,'indexx.html')
def addbook(request):
# Book.objects.create(name='linux',price=33,pub_data="2016-12-12")#增加表数据
# Book.objects.create(**dict)#这个是通过objects.create的方法去Book表里添加数据的
#
# b = Book(name = 'python', price = 99 ,pub_data = '2019-12-12')#这个是通过函数属性增加数据
# b.save()
'''
publish_obj = Publish.objects.filter(name='南方出版社')[0]
Book.objects.create(name='语文',price=106,pub_date="2018-01-11",publish=publish_obj)
#通过关联的主表插入外键
book_obj = Book.objects.get(name='python')
print(book_obj,type(book_obj))#python <class 'blog.models.Book'> 定位到BOOK表
print(book_obj.name) #python
print(book_obj.pub_date) #2021-01-05
#一对多:book_obj.publish--------一定是一个对象
print(book_obj.publish.name) #大学出版社
print(book_obj.publish.city) #莲花
print(type(book_obj.publish))
#<class 'blog.models.Publish'> book_obj.publish这一步其实就是找到models下的Publish类也即是说可以直接定位到publish这张表
#查询南方出版社出过的所有书籍名字和价格
'''
'''
#方式一
# b = Publish.objects.filter(name='南方出版社')[0]
# ret = Book.objects.filter(publish_id=b).values('name','price')
# print(ret)
# #方式二
# b = Publish.objects.filter(name='南方出版社')[0]
# print(b.book_set.all().values('name','price'),type(b.book_set.all()))#type是class 'django.db.models.query.QuerySet'