Flask —— SQLAlchemy

Flask 学习笔记

一、SQLAlchemy 介绍


        数据库是一个网站的基础。Flask 可以使用很多种数据库。比如 MySQL, MongoDB,SQLite,PostgreSQL 等。而在 Flask 中,如果想要操作数据库,我们可以使用 ORM 来操作数据库,使用 ORM 操作数据库将变得非常简单。

在 Flask 中操作数据库之前(以 MySQL 为例),先要安装这些模块:

  1. mysql:如果是在 windows 上,到官网下载。如果是 Ubuntu,通过命令 sudo apt-get install mysql-server libmysqlclient-dev -yq 进行下载安装。

  2. pymysql:pymysql 是用 Python 来操作 mysql 的包,因此通过 pip 来安装,命令如下:pip install pymysql

  3. SQLAlchemy:SQLAlchemy 是一个数据库的 ORM 框架,我们在后面会用到。也是通过 pip 来安装:pip install SQLAlchemy




二、SQLAlchemy 的使用


2.1、通过 SQLAlchemy 连接数据库

        首先从 sqlalchemy 中导入 create_engine,用这个函数来创建引擎,然后用 connect() 来连接数据库。其中比较重要的一点是,通过 create_engine 创建引擎的时候,需要传递一个满足某种格式的字符串:

	# 什么数据库+相应的数据库引擎://账号:密码@数据库地址:端口/数据库名称?编码类型
	
	dialect+driver://username:password@host:port/database?charset=utf8
  • dialect :是数据库的实现,比如 MySQL、PostgreSQL、SQLite,并且转换成小写。

  • driver :是 Python 对应的驱动,如果不指定,会选择默认的驱动,比如 MySQL 的默认驱动是 MySQLdb。

  • username :是连接数据库的用户名。

  • password :是连接数据库的密码。

  • host :是连接数据库的域名。

  • port :是数据库监听的端口号。

  • database :是连接哪个数据库的名字。

	from sqlalchemy import create_engine
	
	# 连接数据库所需的参数
	HOSTNAME = "127.0.0.1"
	PORT = 3306
	DATABASE = "dvwa"
	USERNAME = "root"
	PASSWORD = "root"
	
	# 创建数据库引擎
	DB_URL = f"mysql+pymysql://{USERNAME}:{PASSWORD}@{HOSTNAME}:{PORT}/{DATABASE}?charset=utf8"
	engine = create_engine(DB_URL)
	
	# 创建连接
	conn = engine.connect()
	
	# 查询 users 表
	result = conn.execute("select * from users")
	
	# 输出第一条记录
	print(result.fetchone())

这里可能会报一个警告

	Warning: (1366, "Incorrect string value: '\\xD6\\xD0\\xB9\\xFA\\xB1\\xEA...' for column 'VARIABLE_VALUE' at row 485")

这是因为在最新的 flask 里,官方建议使用 mysql-connector,所以想解决这个警告只需安装下这个包,然后如下使用即可:

DB_URL2 = f"mysql+mysqlconnector://{USERNAME}:{PASSWORD}@{HOSTNAME}:{PORT}/{DATABASE}?charset=utf8"



2.2、用 SQLAlchemy 执行原生 SQL

	# 使用 with 语句连接数据库,如果发生异常会被捕获
	with engine.connect() as conn:
	    # 创建一个 authors 表,有自增长的 id 和 name
	    conn.execute('create table authors(id int primary key auto_increment, name varchar(25))')
	
	    # 插入两条数据到表中
	    conn.execute('insert into authors(name) values("abc")')
	    conn.execute('insert into authors(name) values("老王")')
	
	    # 执行查询操作
	    results = conn.execute('select * from authors')
	    # 从查找的结果中遍历
	    for result in results:
	        print(result)
	
	    # 先删除 authors 表
	    # conn.execute('drop table if exists authors')
发布了145 篇原创文章 · 获赞 1 · 访问量 5847

猜你喜欢

转载自blog.csdn.net/qq_43621629/article/details/105647274