Flask 连接MySQL数据库的方法
Posted Code枕边书
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Flask 连接MySQL数据库的方法相关的知识,希望对你有一定的参考价值。
Method 1:pymsql
通过mysql-Python对数据库的增、删、改、查等操作,都是要先建立connection连接对象,然后获取cursor, 最后需要关闭cursor 对象和conneciton 连接。
在程序中使用cursor.execute()方法来执行相关更新数据的操作,如果没有出现异常,则使用conn.commit方法提交事务,让数据真正生效。如果出现异常,则需要使用conn.rollback()方法回滚事务。
from flask import Flask
import 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','123456@qq.com')"
# 改:
# 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() # 关闭数据库游标
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 Flask
import pymysql
from flask_migrate import Migrate
from 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() #方法2
print(user1.username) #查找id=1的对象,输出它的用户名
# 一种:
result=User.query.filter_by(password='123456').all() #方法1
# result=User.query.filter(User.password=='123456').all() #方法2
for 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 | 定义该列的默认值 |
以上是关于Flask 连接MySQL数据库的方法的主要内容,如果未能解决你的问题,请参考以下文章
连接MySQL出现错误:ERROR 1045 (28000): Access denied for user ‘root‘@‘localhost‘ (using password: YES)(代码片段