关于Flask数据库

Flask没有指定使用的数据库,不像django提供了orm数据库抽象层,可以直接采用对象的方式操作数据库。但为了开发效率,在开发Flask项目中一般会选择 SQLALchemy 来操作数据库,类似django的ORM.SQLALchemy实际是对数据库的抽象,让开发者不直接使用sql语句进行开发,而是通过Python对象来操作数据库。

以下所有的操作都在PyCharm中进行

flask连接sqlite

1. 下载安装

安装flask

pip install flask

安装 Flask-SQLAlchemy

pip install Flask-SQLAlchemy

2. 设置连接

== flask连接sqlite数据库(以下可能会报错,请注意注释!)==

1. 代码

from flask import Flask

from flask_sqlalchemy import SQLAlchemy

import os

app = Flask(__name__)

# 【1】注释以下两行后可能会报错: RuntimeError: Either 'SQLALCHEMY_DATABASE_URI' or 'SQLALCHEMY_BINDS' must be set.

# app_ctx = app.app_context()

# app_ctx.push()

class BaseConfig():

DEBUG = True

# 获取项目目录

APP_PATH = os.path.dirname(__file__)

# sqlite数据库url

SQLALCHEMY_DATABASE_URI = f'sqlite:///{APP_PATH}/database'

app.config.from_object(BaseConfig)

# 创建数据库连接,管理项目

db = SQLAlchemy(app)

class User(db.Model): #模型类继承db.Model

"""创建User表"""

# SQLAlchemy 需要手动执行主键列,第一个参数是 字段类型,第二个参数是约束条件

id = db.Column(db.INTEGER, primary_key=True)

username = db.Column(db.String(50))

password = db.Column(db.String(40))

# 【2】若想增加一个字段,run之后并没有加入表中,可以先删除表,再run,然后刷新即可加入(因为该表已存在,不会重新创建表了)

# desc = db.Column(db.String(40))

if __name__ == '__main__':

# 【3】删除所有表,注意这条是危险命令,会将模型类对应数据库中的表物理删除。在实际生产环境下勿用。

# db.drop_all()

db.create_all() # 创建所有的表

2. pycharm中操作sqlite

问题分析

- 注释【1】问题:RuntimeError: Working outside of application context.

直接运行以上代码,会发现报错“RuntimeError: Working outside of application context.”(下图),需要撤销注释【1】 解决:请看大神操作

运行之前 再次运行,会发现出现了数据库

- 注释【2】问题:如何新增字段?

新增一条字段后,运行,刷新表后并没有显示新增字段, 将注释【3】撤销,再运行,刷新表后就可发现新增的字段名。

3. 附:配制键 & 常用数据库的链接URI

1. Flask-SQLAlchemy 配置键

2. 常用数据库的链接URI

URI: 统一资源标识符,用于标识某一互联网资源名称的字符串

数据库URIMySQLmysql://username:password@hostname/databasePostgrespostgresql://username:password@hostname/databaseSQLite (Unix)sqlite:python/data/databaseSQLite (Windows)sqlite:///c:/db/data/databaseOracleoracle://scott:tiger@127.0.0.1:1521/sidname

字段说明: username: 登录数据库的用户名 password: 登录数据库的密码 hostname:服务器主机ip,可以是本地主机(localhost)也可以是远程服务器 database:表示要使用的数据库

在ubuntu中连接mysql要先创建数据库: 先在mysql中创建数据库:

# 连接mysql

mysql -uroot -pmysql

# 查看所有数据库

show databases;

# 创建数据库名为 py

create database py charset=utf8;

flask连接mysql

1. 安装pymysql

pip install pymysql # 首先保证安装有mysql应用程序

2. flask连接mysql

- 代码

from flask import Flask

from flask_sqlalchemy import SQLAlchemy

import os

import pymysql

pymysql.install_as_MySQLdb()

app = Flask(__name__)

# 不加以下两行可能会报错 RuntimeError: Either 'SQLALCHEMY_DATABASE_URI' or 'SQLALCHEMY_BINDS' must be set.

app_ctx = app.app_context()

app_ctx.push()

class BaseConfig():

DEBUG = True

# 获取项目目录

APP_PATH = os.path.dirname(__file__)

# sqlite数据库url

# SQLALCHEMY_DATABASE_URI = f'sqlite:///{APP_PATH}/database'

# mysql数据库url

SQLALCHEMY_DATABASE_URI = 'mysql://username:password@hostname/database' # 填写自己mysql数据库的用户名,密码,主机IP端口,数据库名 例如:hostname:127.0.0.1:3306

app.config.from_object(BaseConfig)

# 创建数据库连接,管理项目

db = SQLAlchemy(app)

class User(db.Model): #模型类继承db.Model

id = db.Column(db.INTEGER, primary_key=True)

username = db.Column(db.String(50))

password = db.Column(db.String(40))

# desc = db.Column(db.String(40)) # 增加一个字段 run后没有加入表中,要先删除表,再run,然后刷新表

if __name__ == '__main__':

# 删除所有表

# db.drop_all()

db.create_all() # 创建所有的表

- 连接mysql

1. 先创建一个数据库

2. pycharm中操作mysql

测试连接时,如果出现了如下报错:Server returns invalid timezone. Need to set ‘serverTimezone’ property. 原因:时区不一致,MySQL驱动中默认时区是UTC,与本地时间(中国)相差8个小时。 GMT(Greenwich Mean Time):格林威治标准时间 UTC:世界标准时间 CST(China Standard Time):中国标准时间 GMT + 8 = UTC + 8 = CST

方法: 点击Set time zone,在UTC后+8(或者改为GMT)

3. 连接成功

文章链接

评论可见,请评论后查看内容,谢谢!!!评论后请刷新页面。