在操作数据库之前,首先要连接数据库,这里我们以配置Mysql为例连接数据库,不需要单独的创建一个连接对象,只需要在setting.py 文件中做好数据库的相关配置就可以了。实例代码如下:
#setting.py
DATABASES = {
'default': {
# 数据库引擎(sqlites/mysql/oracle等)
'ENGINE': 'django.db.backends.mysql',
# 数据库名字
'NAME': 'django_db1',
# 链接数据库用户名
'USER': 'root',
# 连接数据库密码
'PASSWORD': 'wu642201518',
# 连接数据库端地址
'HOST': '127.0.0.1',
#连接数据库端口号
'PORT': '3306'
}
}
#init.py
import pymysql
pymysql.install_as_MySQLdb()
在Django中操作数据库有两种方式。第一种方式就是使用原生sql语句操作,第二种就是用ORM来操作。目前先了解第一种。
在Django中使用原声sql语句操作其实就是使用python db api的接口来操作。如果你的MySQL驱动使用的是pymysql,那么你就是使用pymysql来操作的,只不过Django将数据连接的这一部分封装好了,我们只要在settings.py中配置好了数据库连接信息后直接使用Django封装好的接口就可以操作了。实例代码如下:
# 使用django封装好的connection对象,会自动读取setting.py中数据库的配置信息
from django.shortcuts import render
from django.db import connection
def index(request):
cursor = connection.cursor()
cursor.execute("insert into book(id,name,author) values(null,'三国演义','罗贯中')")
result = cursor.execute("select id,name,author from book ")
#返回所有数据
rows = cursor.fetchall()
return render(request,'index.html')
---------------------------------------图书管理系统------------------------------------
新建front(前端)app,并在settings.py中完成安装
新建数据库book_manger
settings.py
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'book_manager',
'USER': 'root',
'PASSWORD': 'wu642201518',
'HOST': '127.0.0.1',
'PORT':'3306'
}
}
init.py
import pymysql
pymysql.install_as_MySQLdb()
from django.shortcuts import render
from django.db import connection
def get_corsor():
return connection.cursor()
def index(request):
cursor = get_corsor()
cursor.execute('select id,name,author from book')
books = cursor.fetchall()
#[(1,'三国演义','罗贯中'),(2.)。。。。。。。。。。。]
return render(request,'index.html',context={"books":books})
def add_book(request):
pass
def book_detail(request,book_id):
pass
from django.urls import path
from front import views
urlpatterns = [
path('',views.index,name='index'),
path('add_book/',views.add_book,name='add_book'),
path('book_detail//' ,views.book_detail,name='book_detail'),
path('delete_book/',views.delete_book,name='delete_book')
]
*{
margin: 0; //*代表所有标签,初始化外边距内边距
padding: 0;
}
.nav{
background: #3a3a3a; //背景色
height: 65px; //设置高度
overflow: hidden; //清除浮动
}
.nav li{
float: left; //标签左浮动
list-style: none; //去除远点
margin: 0 20px; //标签间距
line-height: 65px; //字体垂直居中(设置行高等于外盒子)
}
.nav li a{
color: #fff; //a标签(字体)左浮动
text-decoration: none; //下划线
}
.nav li a:hover{
color: lightblue; //鼠标指向标签变色
}
#base.html
{% load static %}
<html lang="en">
<head>
<meta charset="utf-8">
<title>图书管理系统title>
<link rel="stylesheet" href="{% static 'front/base.css' %}">
head>
<body>
<nav>
<ul class="nav">
<li><a href="/">首页a>li>
<li><a href="{% url 'add_book' %}">发布图书a>li>
ul>
nav>
{% block content %}
<table>
<tr>
tr>
table>
{% endblock %}
body>
html>
#index.html
{% extends 'base.html' %}
{% block content %}
<table>
<thead>
<tr>
<th>序号th>
<th>书名th>
<th>作者th>
tr>
thead>
<tbody>
{% for book in books %}
<tr>
<td>{{ forloop.counter }}td>
<td><a href="{% url 'book_detail' book_id=book.0 %}">{{ book.1 }}a>td>
<td>{{ book.2 }}td>
tr>
{% endfor %}
tbody>
table>
{% endblock %}
#add_book.html
{% extends 'base.html' %}
{% block content %}
<form action="" method="post">
<table>
<tbody>
<tr>
<td>书名td>
<td><input type="text" name="name">td>
tr>
<tr>
<td>作者td>
<td><input type="text" name="author">td>
tr>
<tr>
<td>td>
<td><input type="submit" value="提交">td>
tr>
tbody>
table>
form>
{% endblock %}
===============================================================================
#book_details.html
{% extends 'base.html' %}
{% block content %}
<p>书名:{{ book.1 }}p>
<p>作者:{{ book.2 }}p>
<form action="{% url 'delete_book' %}" method="post">
<input type="hidden" name="book_id" value="{{ book.0}}">
<input type="submit" value="删除">
form>
{% endblock %}
================================================================================
orm模型:
在app中的models.py中创建模型
from django.db import models
class Book(models.Model):
id = models.AutoField(primary_key=True)
name = models.CharField(max_length=100,null=False)
author = models.CharField(max_length=100,null=False)
price = models.FloatField(null=False,default=0)
class Publisher(models.Model):
name = models.CharField(max_length=100,null=False)
address = models.CharField(max_length=100,null=False)
python manage.py makemigrations
python manage.py migrate