vlambda博客
学习文章列表

Flask 连接MySQL数据库的方法


Method 1:pymsql

  通过MySQL-Python对数据库的增、删、改、查等操作,都是要先建立connection连接对象,然后获取cursor, 最后需要关闭cursor 对象和conneciton 连接。
  在程序中使用cursor.execute()方法来执行相关更新数据的操作,如果没有出现异常,则使用conn.commit方法提交事务,让数据真正生效。如果出现异常,则需要使用conn.rollback()方法回滚事务。


from flask import Flaskimport pymysql
app = Flask(__name__)
# 连接本地Mysql数据库conn = pymysql.connect( host='localhost', port=3306, user='root', # 用户名 password='root', # 密码 database='wuao', # 数据库的名字 charset='utf8')
cursor = conn.cursor() # 获取游标
# 注:user为表名try: # 增: sql = "insert into user(uid,username,password,email) values ('1','hanhan','123456','[email protected]')" # 改: # sql = "update user set password='654321' where name='hanhan'" # 删: # sql = "delete from user where username='hanhan'" cursor.execute(sql) # 执行单条SQL语句 conn.commit() #提交事务
# 这个时候我们会发现,双引号内都是sql语句,其余功能我就不多写了, # 会sql语句的朋友可以轻轻松松的使用这种方法,对你的数据库进行任何操作 sql = "select *from user" # 全连接的SQL语句,要查询user表中所有的数据
cursor.execute(sql) # 执行单条SQL语句 results = cursor.fetchall() # 接受全部的返回结果行 print(results)except Exception as e: # 抛出异常 print(e)

conn.rollback() # 事务回滚,如果产生异常,退回到执行sql语句之前cursor.close() # 关闭游标conn.close() # 关闭数据库游标
@app.route('/')def conn(): r=results #将数据库信息显示在前端 return str(r)
if __name__ == '__main__': app.run(debug=True)COPY
Method 2:SQLAlchemy

  SQLAlchemy是一个基于Python实现的 ORM ( Object Relational Mapping , 对象关系映射 ) 框架,建立在 DB API 之上,使用 ORM 进行数据库操作。
  Flask-SQLAlchemy 这个 ORM 框架使我们操作数据库变成了操作对象,一个表被抽象成了一个类,一个表中的字段被抽象成一个类的多个属性,一条数据就抽象成该列的一个对象,不用再写烦琐的底层 SQL 语句了。

from flask import Flaskimport pymysqlfrom flask_migrate import Migratefrom flask_sqlalchemy import SQLAlchemy
app = Flask(__name__)
app.config['SECRET_KEY'] = '123'
#依次对应的是用户名 密码 数据库名称app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql://root:root@localhost/yiban'#动态追踪修改设置,如未设置只会提示警告app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = True#查询时会显示原始SQL语句app.config['SQLALCHEMY_ECHO'] = True
# 初始化一个对象db = SQLAlchemy(app)
# 测试数据库是否连接成功# db.create_all()
pymysql.install_as_MySQLdb()migrate = Migrate(app, db)# db.init_app(app) #初始化数据库接受文件pymysql.install_as_MySQLdb()
class User(db.Model): #创建一个User类 __tablename__ = 'user' #表名
id = db.Column(db.Integer, primary_key=True,autoincrement=True,default=1) #整型,主键,自增长,默认值为1
username = db.Column(db.String(50), nullable=False) # 用户名不能为空
password = db.Column(db.String(50), nullable=False) # 密码不能为空
# db.create_all() #创建表,对象映射,在增删改查时可去掉
# 增:user1=User(id=1,username='hanhan',password='123456')db.session.add(user1) #将user1加入数据库
# 查:# 一条:user1=User.query.filter_by(id=1).first() #方法1# user1=User.query.filter(User.id==1).first() #方法2print(user1.username) #查找id=1的对象,输出它的用户名
# 一种:result=User.query.filter_by(password='123456').all() #方法1# result=User.query.filter(User.password=='123456').all() #方法2for i in result: print(i.username) #查找password为123456的所有对象,输出它们的名字
# 改:#以查为前提user1.username='han++' #将 user1 的 username 由 hanhan 变为 han++
# 删:#以查为前提# db.session.delete(user1) #删除对象user1
db.session.commit() #提交事务
if __name__ == '__main__': app.run(debug=True)

COPY

Flask-SQLAlchemy 常用数据类型

类型名称 Python 类型 描述
Integer int 整型,通常为32位,映射到数据库中是 int 类型
SmallInteger int 短整型,通常为16位,映射到数据库中是 int 型
BigInteger int 或 long 整型,精度不受限制,映射到数据库中是 int 型
Float float 浮点数,映射到数据库中是 float 类型
Numeric decimal 定点数
String str 可变长度字符串,映射到数据库中是 varchar 整型
Text str 可变长度字符串,适合大量文本
Unicode unicode 可变长度 Unicod e字符串
Boolean bool 布尔值,映射到数据库中是 tinyint 类型
Date datetime.date 日期类型
Time datatime.time 时间类型
Datatime datatime.datatime 时间间隔
Enum str 字符列表
PickleType 任意 Python 对象 实现 Pickle 序列化
LargeBinary str 二进制


Flask-SQLAlchemy 声明可选参数

可选参数 描述
Primary_key 如果设置为 True,该列为表的主键
unique 如果设置为 True,该列不允许有相同值
index 如果设置为 True,为提高查询效率,为该列创建索引
nullable 如果设置为 True,该列允许为空。设置为 False,该列不允许为空值
default 定义该列的默认值