flask笔记 02 | Flask数据库连接(sqlite、mysql)

关于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: 统一资源标识符,用于标识某一互联网资源名称的字符串

数据库URI
MySQLmysql://username:password@hostname/database
Postgrespostgresql://username:password@hostname/database
SQLite (Unix)sqlite:python/data/database
SQLite (Windows)sqlite:///c:/db/data/database
Oracleoracle://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. 连接成功

在这里插入图片描述

  • 6
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
首先,你需要安装Flask和SQLAlchemy的库。可以使用以下命令进行安装: ``` pip install flask pip install sqlalchemy ``` 接下来,你需要在Flask应用程序中配置SQLAlchemy。在你的Flask应用程序中,需要添加以下代码: ```python from flask import Flask from flask_sqlalchemy import SQLAlchemy app = Flask(__name__) app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql+pymysql://<username>:<password>@<host>/<database_name>' app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False db = SQLAlchemy(app) ``` 在上面的代码中,你需要用实际的数据库连接信息替换`<username>`, `<password>`, `<host>`和`<database_name>`。`SQLALCHEMY_TRACK_MODIFICATIONS`配置项设置为False可以禁止大部分对数据库的修改监控,以提高性能。 现在,你可以定义一个模型类来表示数据库表。下面是一个示例: ```python class User(db.Model): id = db.Column(db.Integer, primary_key=True) name = db.Column(db.String(50)) email = db.Column(db.String(120), unique=True) def __init__(self, name, email): self.name = name self.email = email def __repr__(self): return '<User %r>' % self.name ``` 最后,你可以使用SQLAlchemy提供的API进行数据库操作。例如,以下代码将在数据库中创建一个新用户: ```python from models import User new_user = User('John', 'john@example.com') db.session.add(new_user) db.session.commit() ``` 以上就是使用Flask和SQLAlchemy连接Mysql数据库的基本过程。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

剑心诀

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值