pyMysql

1.安装:

cmd输入:(venv)pip install pyMySQL

1.1导入:

import pymysql

示列:在app=Flask(__name__)下面添加如下代码:

from flask import Flask,render_template
import pymysql
app = Flask(__name__)
conn=pymysql.Connect(host='127.0.0.1',  #地址port=3306,         #端口user='root',       #用户名password='root',   #密码db='demo-1',       #连接数据库的名称charset='utf8'     #设定连接数据的字符集编码
)

说明:

python 建立了与数据库的连接,其实是建立了一个MysqlLdb.connect()的连接对象,python 就是通过连接对象与数据库进行交互。connection 常用的方法有4种。

方法名 说明
cursor() 创建一个游标对象并返回
commit() 提交当前事务操作,对数据库的增删改查先保存到缓存里,当执行此方法后在提交给数据库。
rollback()

回滚当前事务操作,取消前面会话中的增删改查操作。

close() 关闭数据库连接操作。

查询示列:

spl='select * from tb_1' #设定查询语句
cursor=conn.cursor() #设定游标对象
cursor.execute(spl) #执行语句
results=cursor.fetchall()  #接收全部
print(results) #输出

光标对象支持的一些方法:

方法名 说明
execute() 执行一个数据库查询的语句
fetchone() 获取结果集中的下一行
fetchmany(size) 获取结果集中的下一行
fetchall() 获取结果集中剩下所有行
rowcount 最近一次执行数据库查询命令后,返回数据的行数
close() 关闭游标

增加示列:

cursor=conn.cursor()  #创建游标对象try:sql='insert into tb_1 values (12,"da")'cursor.execute(sql)conn.commit()   #提交事务
except Exception as a:  #如果有错误,捕获异常print(a)
conn.rollback()   #事务回滚
cursor.close()  #关闭游标
conn.close()   #关闭连接对象

修改示列:

cursor=conn.cursor()  #创建游标对象try:sql='update tb_1 set name="chi" where id=6'   #修改cursor.execute(sql)conn.commit()   #提交事务
except Exception as a:  #如果有错误,捕获异常print(a)
conn.rollback()   #事务回滚
cursor.close()  #关闭游标
conn.close()   #关闭连接对象

删除示列:

cursor=conn.cursor()  #创建游标对象try:sql='delete from tb_1 where name="da"'   #删除cursor.execute(sql)conn.commit()   #提交事务
except Exception as a:  #如果有错误,捕获异常print(a)
conn.rollback()   #事务回滚
cursor.close()  #关闭游标
conn.close()   #关闭连接对象

总结:关键字:‘游标对象’,‘连接对象’,‘’事务提交‘’,‘回滚’,‘关闭连接对象’,‘关闭游标’,‘执行语句’,‘返回行数’,‘接收全部’,其实主要的就是有个连接数据库的对象和创建一个光标的对象。

2.Flask-SQLAIchemy

安装:

pip install flask-sqlalchemy

1.对象-关系映射实质

示列:

mysql> create table tb_2(-> id int auto_increment primary key,-> user varchar(30) not null,-> password int(10) not null);

映射:

class Book(db.Model):__tablename__ = "book"  #表名字id=db.Column(db.Integer ,primary_key=True,autoincrement=True)  #列 类型  主键 自增title=db.Column(db.String(50),nullable=False)    #列 类型   非空isbn=db.Column(db.String(20),nullable=False)    #列  类型  非空

完整示列:

1.1首先创建一个配置文件,作为连接数据库的信息

HOST = '127.0.0.1'
PORT = '3306'
DATABASE = 'demo-1'
USERNAME = 'root'
PASSWORD = 'root'DB_URI = "mysql+pymysql://{username}:{password}@{host}:{port}/{db}?charset=utf8".\format(username=USERNAME,password=PASSWORD, host=HOST,port=PORT, db=DATABASE)SQLALCHEMY_DATABASE_URI = DB_URI
SQLALCHEMY_TRACK_MODIFICATIONS = False
SQLALCHEMY_ECHO = True

1.2

from flask_sqlalchemy import SQLAlchemy
from flask import Flask
import config
import pymysql
from datetime import datetime
app=Flask(__name__)
app.config.from_object(config)
db=SQLAlchemy(app)  #捆绑,初始化一个对象class Book(db.Model):__tablename__ = "bookas"  #表名字id=db.Column(db.Integer ,primary_key=True,autoincrement=True)  #列 类型  主键 自增title=db.Column(db.String(50),nullable=False)    #列 类型   非空isbn=db.Column(db.String(20),nullable=False)    #列  类型  非空storage_time=db.Column(db.DateTime,default=datetime.now)
db.create_all()   #创建数据库
@app.route('/')
def index():return '你好'
if __name__ == '__main__':app.run(debug=True)

1.3添加数据

@app.route('/add')
def add():book1=Book(id=3,title='php',isbn='1234569')book2=Book(id=4,title='c++',isbn='6543216')db.session.add_all([book1,book2])   #这是添加多个,db.session.add()一个一个添加db.session.commit()    #提交事务return '添加数据成功'

1.4查询数据

@app.route('/query')
def selects():result=Book.query.filter(Book.id==1).first()   #查询id==1的print(result.title) #输出title字段内容return '数据查询成功'

1.5删除数据


@app.route('/delete')
def delete():book_s=Book.query.filter(Book.id=='4').first()db.session.delete(book_s)db.session.commit()return '数据删除成功'

1.6创建一对一的关系表

import config
from flask_sqlalchemy import SQLAlchemy
from flask import Flaskapp = Flask(__name__)
app.config.from_object(config)
db = SQLAlchemy(app)class User(db.Model):__tablename__ = 'user'id = db.Column(db.Integer, autoincrement=True, primary_key=True)username = db.Column(db.String(30), nullable=False)  # 账号password = db.Column(db.String(40), nullable=False)  # 密码phone = db.Column(db.String(11), nullable=False)  # 电话email = db.Column(db.String(20), nullable=False)class Lib_card(db.Model):__tablename = 'lib_card'id = db.Column(db.Integer, autoincrement=True, primary_key=True)card_id = db.Column(db.Integer, nullable=False)paper_type = db.Column(db.String(50), nullable=False)user_id = db.Column(db.Integer, db.ForeignKey('user.id'))  # 表示在这块表中创建一个外键users = db.relationship('User', backref=db.backref('cardss'), uselist=False)  # 与主表绑定db.create_all()@app.route('/add')
def add():user1 = User(id=1, username='张三', password='11111', phone='1888888888', email='111@.01')user2 = User(id=2, username='张四', password='22222', phone='1777777777', email='2222@.02')db.session.add_all([user1, user2])card1 = Lib_card(id=1, card_id=1888000, paper_type='身份证', user_id=1)card2 = Lib_card(id=2, card_id=1999999, paper_type='身份证', user_id=2)db.session.add_all([card1, card2])db.session.commit()return ' 添加数据成功'
@app.route('/select')
def select():user=User.query.filter(User.username=='张四').first()   #获得id=2art=user.cardss  #通过cardss反向查询for k in art:   print(k)print(k.card_id)card=Lib_card.query.filter(Lib_card.card_id).first()user=card.usersprint(user)print(user.username)return '查询数据成功后'@app.route('/')
def index():return '你好python'if __name__ == '__main__':app.run(debug=True)

个人说明:

在定义Lib_card类后,申明了一个外键,并且在relationship方法中使用了userlist=Flase来约束其关系,user_id=db.Column(db.Integer,db.ForeignKey('user.id'))表示创建一个外键,类型要和主表一样,通过db.ForeignKey('user.id')与主表绑定user=db.relationship('User,backref=db.backref('cards')');uselist=Flase 表示user可以根据Lib_card中的借书证号查找到用户表中的信息backref='cardss',表示用户可以直接通过cardss查找到该用户下的借书证号。

1.7创建一对多

from flask import Flask
from flask_sqlalchemy import SQLAlchemy
import config
app=Flask(__name__)
app.config.from_object(config)
db=SQLAlchemy(app)
class Writer(db.Model):__tablename__='writer'id=db.Column(db.Integer,autoincrement=True,primary_key=True)name=db.Column(db.String(30),nullable=False)books=db.relationship('Book',backref='writers')   #让两张表关联class Book(db.Model):__tablename__='books'id=db.Column(db.Integer,autoincrement=True,primary_key=True)titel=db.Column(db.String(50),nullable=False)publishing_office=db.Column(db.String(100),nullable=False)isbn=db.Column(db.String(50),nullable=False)writer_id=db.Column(db.Integer,db.ForeignKey('writer.id'))  #创建外键绑定主键db.create_all()@app.route('/add')
def add():user1=Writer(name='王麻子')user2=Writer(name='李老头')db.session.add_all([user1,user2])book1=Book(titel='python',publishing_office='清华大学出版社',isbn='987654321',writer_id=1)book2=Book(titel='JavaScript',publishing_office='人民邮电出版社',isbn='123456789',writer_id=2)db.session.add_all([book1,book2])db.session.commit()return '添加数据'@app.route('/select')
def select():writer=Writer.query.filter(Writer.id=='1').first()book=writer.booksfor i in book:print(i)print(i.titel)book=Book.query.filter(Book.id=='2').first()writer=book.writersprint(writer.name)return '查询数据'@app.route('/')
def index():return '首页'
if __name__ == '__main__':app.run(debug=True)

说明:

一对多取消掉了uselist=Flase,然后其实逻辑是主表查询子表需要调用backref=writers中的writers属性,子表查询父表需要调用books属性,relationship()使两个表进行关联,写在那个表都没关系,写在哪个表就要用头属性调用去查询另外一个表,没有写relationship()方法的表需要通过backref关键字属性去调用查询另外一个表。

1.8多对多关系

from flask import Flask
from flask_sqlalchemy import SQLAlchemy
import configapp = Flask(__name__)
app.config.from_object(config)
db = SQLAlchemy(app)
book_tag = db.Table('book_tag', db.Column('book_id', db.Integer, db.ForeignKey('book.id'), primary_key=True),db.Column('tag_id', db.Integer, db.ForeignKey('shelfing.id'), primary_key=True))
"""
Table()第一个参数为表名称,接着是表的字段类型,接着是设置外键
"""class Book(db.Model):__tablename__ = 'book'id = db.Column(db.Integer, primary_key=True, autoincrement=True)name = db.Column(db.String(30), nullable=False)tage = db.relationship('Shelfing', secondary=book_tag, backref=db.backref('books'))
"""
创建表
"""class Shelfing(db.Model):__tablename__ = 'shelfing'id = db.Column(db.Integer, primary_key=True, autoincrement=True)tag = db.Column(db.String(30), nullable=False)
"""
创建表
"""db.create_all()@app.route('/add')
def add():book1=Book(name='python')book2=Book(name='java')book3=Book(name='c++')tag1=Shelfing(tag='语言')tag2=Shelfing(tag='技术')tag3=Shelfing(tag='计算机')book1.tage.append(tag1)book2.tage.append(tag2)book3.tage.append(tag3)db.session.add_all([book1,book2,book3,tag1,tag2,tag3])db.session.commit()return '添加数据'
@app.route('/select')
def select():book=Book.query.filter(Book.name=='Java' ).first()tag=book.tagefor i in tag:print(i.tag)tag=Shelfing.query.filter(Shelfing.tag=='计算机').first()tags=tag.booksfor i in tags:print(i.name)return '查询数据'@app.route('/')
def index():return '首页'if __name__ == '__main__':app.run(debug=True)

python 数据库框架pyMysql+Flask -SQLAIchemy相关推荐

  1. Python数据库编程pymysql

    Python数据库编程pymysql 一.数据库编程介绍 数据库编程就是针对数据库的操作,通过编写程序的方式,让程序做为数据库的客户端进行数据库操作. 对于MySQL的操作我们可以通过SQL语句,但是 ...

  2. Python常用框架:Flask

    Flask框架的诞生: Flask诞生于2010年, Armin Ronacher的一个愚人节玩笑.不过现在已经是一个用python语言基于Werkzeug工具箱编写的轻量级web开发框架,它主要面向 ...

  3. python数据库框架_目前最受欢迎的12个Python开源框架

    1 Django Django是一款用Python语言写的免费开源的 Python Web应用开发框架,它遵循模型 -视图-控制器(MVC)的架构模式.它是由非营利Django维护软件基金会(DSF) ...

  4. python 三大框架之一Flask入门

    Flask轻量级框架,Flask是python中的轻量级框架. 打开终端 输入pip install Flask 命令 下载以及安装Flask框架 检查是否下载成功及能否使用 首先导入python环境 ...

  5. FastAPI - 一款新型的 Python Web 框架(对比 Flask)

    近日曾想尽办法为 Flask 实现 Swagger UI 文档功能,找到的实现方式基本上是 Flask + Flasgger, 记录在 Flask 应用集成 Swagger UI.然而不断的 Goog ...

  6. python mysqldb安装_Flask干货:访问数据库——Python数据库框架MySQLPython

    图 | 源网络文 | 5号程序员 上一次我们学会了数据库安装,但只是安装好没教大家怎么使用! 嘿,别担心,这不有我呢嘛. 今天就由我给大家介绍介绍框架MySQL-Python. 01 MySQL-Py ...

  7. python数据库框架_Python数据库及ORM框架对比选择

    使用Python进行MySQL的库主要有三个: Python-MySQL(更熟悉的名字可能是MySQLdb), PyMySQL SQLAlchemy. Python-MySQL: 资格最老,核心由C语 ...

  8. python后端框架flask_Vue+Flask轻量级前端、后端框架,如何完美同步开发

    导言我们的Vue2.0应用:简读-微信公众号RSS,即将进入后端开发. Vue+Flask作为轻量级前端.后端框架,非常适合组合起来快速开发.一个是js,一个是Python. Bonus: 可以完美实 ...

  9. python数据库操作pymysql

    安装数据库: pip3 install pymysql 进行数据库的更新.插入.查询等操作: 1 #!/usr/bin/python3.4 2 # -*- coding: utf-8 -*- 3 4 ...

最新文章

  1. R语言plotly包可视化线图(line plot)、使用restyle参数自定义设置可视化结果中线条的颜色、使用按钮动态切换线条的颜色(change line color with button)
  2. TCP/IP详解--学习笔记(8)-DNS域名系统
  3. 保定理工学院专科计算机专业分数线,保定理工学院历年分数线 2021保定理工学院录取分数线...
  4. 来自开发者的点赞 · 网易云信揽获三大技术奖项
  5. cmake-debug和release模式
  6. http响应协议分析
  7. Django(part8)--响应及HttpResponse对象
  8. noip2012-day2-t2
  9. Scala学习笔记05:函数
  10. Ajax学习总结(2)——Ajax参数详解及使用场景介绍
  11. 虚拟机安装ubuntu18.04及其srs服务器的搭建
  12. VS2005查找功能没法使用
  13. intel hd3000 本 在 64位 ubuntu10.04 下 液晶亮度无法调节 的解决之道(亲测)
  14. 学习 STM32之九轴姿态传感器(BWT901CL)串口通信读取数据
  15. android 使用signingConfigs进行打包
  16. 自己制作的直流电机驱动器
  17. 快速生成CRUD接口的神器-IDEA插件EasyCode
  18. 【《Real-Time Rendering 3rd》提炼总结】完结篇:系列合集电子书PDF下载实时渲染知识网络图谱新系列预告
  19. 线上发版如何做到分批发的?详解蓝绿部署,滚动升级,A/B 测试,灰度发布/金丝雀发布
  20. 纯CSS+HTML+JS实现的简易个人网站

热门文章

  1. 1.7Web前端基础笔记
  2. 无框架实现基本人工神经网络对MNIST数据集的识别
  3. 00012.02设计模式(模板设计模式的了解)
  4. 字符串的charCode
  5. 【随笔】现实环境下的自我塑造
  6. C语言/C++/数据结构牛客网刷题20200302
  7. MySQL数据库的下载和安装(详细)
  8. 阿里云不同账号内网互通
  9. 测试计划应包括的内容
  10. 中国工程院院士李伯虎:我国已经进入云制造2.0阶段