python-web框架flask:连接mysql

参考:Python连接MySQL数据库之pymysql模块使用

1、通过pymysql连接

1、pip安装pymysql

       在windows上面安装pymysql需要找到对应的python安装目录,然后通过pip命令进行安装,操作如下(参考:https://www.cnblogs.com/chaojiyingxiong/p/9456063.html):
在这里插入图片描述

2、建立连接

	import pymysql
	
	def db_conn():
		conn = pymysql.connect(host=“你的数据库地址”, user=“用户名”,password=“密码”,database=“数据库名”,charset=“utf8”)
		# 得到一个可以执行SQL语句的光标对象
		cursor = conn.cursor()
		
		sql = """
		CREATE TABLE USER1 (
		id INT auto_increment PRIMARY KEY ,
		name CHAR(10) NOT NULL UNIQUE,
		age TINYINT NOT NULL
		)ENGINE=innodb DEFAULT CHARSET=utf8;
		"""
		# 执行SQL语句
		cursor.execute(sql)
		
		# 关闭光标对象
		cursor.close()
		
		# 关闭数据库连接
		conn.close()

建立连接之后,执行操作就是按照对应sql来执行,不跟你bb,在下告辞。


2、通过SQLAlchemy连接

1、配置文件

创建配置文件config.py,内容如下:

	SQLALCHEMY_DATABASE_URI = 'mysql+pymysql://root:12345678@localhost:3306/mydb'
	# 'mysql+pymysql://用户名称:密码@localhost:端口/数据库名称'
	SQLALCHEMY_TRACK_MODIFICATIONS = True

2、创建连接

创建携带config信息的全局应用对象,并以此创建SQLAlchemy对象,如下:

	from flask import Flask
	from flask_sqlalchemy import SQLAlchemy
	
	app = Flask(__name__)
	app.config.from_object('config')
	db = SQLAlchemy(app, use_native_unicode='utf8')

3、对象绑定表

看一下user对象如何通过SQLAlchemy进行表的绑定。

	# -*- coding: utf-8 -*-
from datetime import datetime, date
from . import app
from . import db
from passlib.apps import custom_app_context as pwd_context
from itsdangerous import (TimedJSONWebSignatureSerializer
                          as Serializer, BadSignature, SignatureExpired)

class User(db.Model):
    """用户"""
    __tablename__ = 'users'
    __table_args__ = {'mysql_engine': 'InnoDB'}  # 支持事务操作和外键
    id = db.Column(db.String(32), doc='手机号码', primary_key=True)
    nickname = db.Column(db.String(20), doc='昵称', default='Wanted User', nullable=False, unique=True)
    password_hash = db.Column(db.String(128), doc='密码', nullable=False)
    payPassword = db.Column(db.String(32), doc='支付密码', nullable=False)
    money = db.Column(db.Float, doc='账户余额', default=50, nullable=False)
    description = db.Column(db.String(50), doc='个性签名', default='这个人很懒,什么也没留下', nullable=False)

4、数据库操作

因为对象已经绑定了数据库表,并且入参为 db.Model,所以可以直接使用对应方法,参考:flask连接mysql数据库操作:

	from app import db

	# 定义数据模型, 设置表格中各个字段的数据类型
	class Grade(db.Model):
	    g_id = db.Column(db.Integer,primary_key=True,autoincrement=True)
	    g_name = db.Column(db.String(30),nullable=False, unique=True)
	    g_num = db.Column(db.Integer, nullable=True)
	    __tablename__ = 'grade'
	    def __init__(self, name, num):
	        self.g_name = name
	        self.g_num = num

	# 生成表格
	db.create_all()
	
	# -------------新增操作---------------------
	grade1 = Grade('py5',38)
	grade2 = Grade('py6',28)
	
	# session:是一块临时存储区域, 用来暂存数据库操作的数据, 最终通过commit统一提交给数据库.
	db.session.add(grade1)
	db.session.add(grade2)
	db.session.commit()
	
	## ------------查询操作---------------------
	# 数据查询(查询所有数据)
	result = Grade.query.all()
	for item in result:
	    print(item.g_name, item.g_num, item.g_id)
	
	# 按照主键值查询
	result = Grade.query.get(1)
	print(result)
	
	# 按条件查询, filter()设置对应的过滤条件, 完成数据的过滤操作
	result = Grade.query.filter(Grade.g_num > 20).all()
	print(result)
	
	# 数据库分页查询, paginate(参数1, 参数2, 参数3), 参数1代表查询的页码, 页码值从1开始; 参数2代表每一页查询的总数据条数; 参数3是布尔类型,用来设定当查询超出范围时, 以何种方式返回结果, 默认为True, 以404错误信息返回, 如果为False此时以空列表形式返回.
	result = Grade.query.paginate(2, 5, False)
	print(result.items)
	
	# 获取查询结果的总数量
	count = Grade.query.count()
	# 按条件查询所有满足的结果的个数
	count = Grade.query.filter(Grade.g_num > 30).count()
	print(count)
	
	# 从查询结果中提取指定数量的数据(利用列表'切片'提取需要的对象)
	result = Grade.query.filter(Grade.g_num > 30).all()[1:3]
	print(result)
	
	# 多条件查询语句 startswith:以指定字符开头
	result = Grade.query.filter(Grade.g_name.startswith('py'),Grade.g_num > 30).all()
	
	from sqlalchemy import *
	"""
	sqlalchemy模块内置的查询条件
	and_(): 并且
	or_(): 或者
	not_(): 非, 条件只能一个
	"""
	
	result = Grade.query.filter(and_(Grade.g_name.startswith('py'),Grade.g_num > 30)).all()
	result = Grade.query.filter(not_(Grade.g_num > 30)).all()
	print(result)
	
	# ------------------删除操作----------------------

	# 数据库的删除  先查询再删除
	grades = Grade.query.filter(Grade.g_id > 9).all()
	for item in grades:
	    db.session.delete(item)
	db.session.commit()
		
	# ---------------------------修改操作----------------
	# 数据修改  查询后修改
	grade_1 = Grade.query.filter(Grade.g_num > 30).first()
	grade_1.g_num = 25
	db.session.commit()
发布了117 篇原创文章 · 获赞 15 · 访问量 5605

猜你喜欢

转载自blog.csdn.net/qq_34326321/article/details/105053518