python操作数据库
- #mysql驱动程序安装
1.Mysql-python:也就是MySQLdb.C语言操作mysql数据库的简单封装.遵循Python DB API v2,只支持python2,不支持python3
2.mysqlclient:是MySQL-python的另一个分支,升级版,修复了一些bug,支持python3.
3.pymysql:纯python编写的驱动.python兼容性好,效率较低.
4.MySQL-Connector/python版:MySQL官方推出的纯python开发的连接MySQL驱动.兼容性好,效率较差.
#使用mysqlclient
安装 pip install mysqlclient
windows安装报错的话,去 https://www.lfd.uci.edu/~gohlke/pythonlibs/#mysqlclient 下载对应版本的包安装即可
MySQL-python, a Python database API 2.0 interface for the MySQL database Consider mysqlclient, a Python 3 compatible fork of MySQL-python. MySQL_python‑1.2.5‑cp27‑none‑win32.whl MySQL_python‑1.2.5‑cp27‑none‑win_amd64.whl Mysqlclient, a fork of the MySQL-python interface for the MySQL database. mysqlclient‑1.3.13‑cp27‑cp27m‑win32.whl mysqlclient‑1.3.13‑cp27‑cp27m‑win_amd64.whl mysqlclient‑1.3.13‑cp34‑cp34m‑win32.whl mysqlclient‑1.3.13‑cp34‑cp34m‑win_amd64.whl mysqlclient‑1.3.13‑cp35‑cp35m‑win32.whl mysqlclient‑1.3.13‑cp35‑cp35m‑win_amd64.whl mysqlclient‑1.3.13‑cp36‑cp36m‑win32.whl mysqlclient‑1.3.13‑cp36‑cp36m‑win_amd64.whl mysqlclient‑1.3.13‑cp37‑cp37m‑win32.whl mysqlclient‑1.3.13‑cp37‑cp37m‑win_amd64.whl
python db api 规范下cursor对象常用接口:
1.description
2.rowcount
3.close
4.execute
5.fetchallfetchmanyfetchone
from django.template.loader import render_to_string from django.http import HttpResponse from django.shortcuts import render,redirect,reverse from datetime import datetime from django.db import connection # def index(request): # cursor = connection.cursor() # # cursor.execute("insert into book(id,name,author) values(null,'三国演义','罗贯中')") # cursor.execute('select * from book') # # rows = cursor.fetchall() # row = cursor.fetchone() # print(row) # return render(request,'index.html') def get_cursor(): return connection.cursor() def index(request): cursor = get_cursor() cursor.execute('select * from book') rows=cursor.fetchall() print(rows) #((id,name,author),(id,name,author),...) return render(request,'index.html',context={'rows':rows}) def add_book(request): if request.method == 'GET': return render(request,'add_book.html') else: name = request.POST.get('name') author = request.POST.get('author') cursor = get_cursor() cursor.execute("insert into book(id,name,author) values(null,'%s','%s')" %(name,author)) return redirect(reverse('index')) def detail(request,book_id): cursor = get_cursor() cursor.execute("select * from book where id=%s" %book_id) book = cursor.fetchone() print(book) return render(request,'detail.html',context={'book':book}) def delete(request): if request.method == "POST": book_id = request.POST.get('name') cursor = get_cursor() cursor.execute("delete from book where id=%s" %book_id) return HttpResponse('删除成功')
from django.urls import path from . import views urlpatterns = [ path('', views.index,name='index'), path('add_book/',views.add_book,name='add_book'), path('detail/<int:book_id>',views.detail,name='detail'), path('delete/',views.delete,name='delete'), ]
*{ margin: 0; padding: 0; } .nav{ overflow: hidden; height: 65px; background-color: aqua; } .nav li{ float: left; margin: 0 30px; list-style: none; line-height: 65px; } .nav li a{ color: black; text-decoration: none; } .nav li a:hover{ color: blue; }
{% load static %} <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> <link href="{% static 'base.css' %}" rel="stylesheet"> </head> <body> <div> <ul class="nav"> <li><a href="/">首页</a></li> <li><a href="{% url 'add_book' %}">发布图书</a> </li> </ul> </div> <div class="content"> {% block content %} {% endblock %} </div> </body> </html>
{% extends 'base.html' %} {% block content %} "这是首页" <table> <thead> <tr> <td>序号</td> <td>书名</td> <td>作者</td> </tr> </thead> <tbody> {% for row in rows %} <tr> <td>{{ forloop.counter }}</td> <td><a href="{% url 'detail' book_id=row.0 %}" >{{ row.1 }}</a></td> <td>{{ row.2 }}</td> </tr> {% endfor %} </tbody> </table> {% endblock %}
{% extends 'base.html' %} {% block content %} add_book... <form method="post" action="{% url 'add_book' %}"> <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 %}
{% extends 'base.html' %} {% block content %} <p>书名:{{ book.1 }}</p> <p>作者:{{ book.2 }}</p> <form method="post" action="{% url 'delete' %}"> <input type="hidden" name="name" value={{ book.0 }}> <input type="submit" value="删除"> </form> {% endblock %}
{% url 'index' book_id=book.1 %}
{% static 'base.css' %}
return redirect(reverse('index'))