ORM
- 可以操作数据表,数据行
- 不能创建数据库,所以必须自己手动建立
配置步骤:
- setting里设置
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql', # 连接的数据库类型
'HOST': '127.0.0.1', # 连接数据库的地址
'PORT': 3306, # 端口
'NAME': "xxoo", # 数据库名称
'USER': 'root', # 用户
'PASSWORD': '123456' # 密码
}
}
- django中使用pymysql代替MySQLdb连接数据库
文件__init__.py
import pymysql
pymysql.install_as_MySQLdb()
- 在app01文件下models.py里面定义类,必须继承models.Model,创建了一张表,表结构如代码
class Userinfo(models.Model):
id = models.AutoField(primary_key = true)
name = models.CharField(null = false,max_length = 20)
# 类名对应表名,里面包含字段
python3 manage.py makemigrations
python3 manage.py migrate
# 上面第一句抓取models.py文件里面的内容,第二句执行文件里面的内容
ORM展示数据库数据:
1.urls.py先建立对应的访问关系
urlpatterns = [
url(r'^admin/', admin.site.urls),
url(r'^xxoo/',xxoo)
]
2.创建相应的函数
form app01 import models
def xxoo(request):
ret = models.Userinfo.objects.all() # ret是查询数据库的结果(全部),是列表
ret[0] # 表示第一行数据,ret[0].ID表示第一行数据的Id列
return render(request,"user_list.html",{"user_list":ret})
# 返回一个"user_list.html"并渲染,渲染网页的时候网页当中的"user_list"变量的值是ret
3.创建"user_list.html"
<table border="1">
<thead>
<tr>
<td>ID</td>
<td>Name</td>
</tr>
</thead>
<tbody>
{% for tmp in all_Publishing_House %}
<tr>
<td>{{ tmp.ID }}</td>
<td>{{ tmp.Name }}</td>
</tr>
{% endfor %}
</tbody>
</table>
# 注意这里的写法
ORM删除数据库数据:
增加按钮action=某个路径,建立对应的函数,get方法获取ID,ORM查找数据库,删除
del_date = models.类名.object.get(id = 网址传过来的数据,none) # 某一行数据
del_date.delete() # 删除
# get(a,b) a是查询的关键字,b是默认为none,例如字典当中的get方法
ORM对应关系
class Game(models.Model):
ID = models.AutoField(primary_key=True)
Name = models.CharField(max_length=32,null=False,unique=True)
Publishing_House = models.ForeignKey(to=Publishing_House)
# 类名对应数据库中表名,类属性对应字段,最后一行是外键,外键取出来的还是一个对象
ORM添加
def add_book(request):
if request.method == "POST":
name = request.POST.get("title_name")
models.Game.objetcs.creat(Name = name)
# form表单action提交过来的方法是post的划,把name 指向form表单中title_name字段的对应值
最后一句是Game这个表中创建该数据
ORM删除数据
<a href="/delete_game/?id={{tmp.ID}}">删除</a>
# 网页里把删除标签指定一个链接地址,并把id的值传递给后端
# 后端对应函数的内容
def add_book(request):
del_id = request.GET.get("id")
models.Game.objetcs.get(del_id).delete()