首页 > 数据库 >记录:创建个人博客网站(基于FLASK)2.2建立数据库的连接

记录:创建个人博客网站(基于FLASK)2.2建立数据库的连接

时间:2024-04-24 17:56:13浏览次数:17  
标签:语句 FLASK 数据库 db init sql 2.2 app

2.2、 建立数据库的连接


在本项目中,没有使用FLASK官方教程的sqlite3数据库,而是使用的本地的Mysql数据库
采用了flask_sqlalchemy库,实现了与目标数据库的映射。
通过调用click库,实现了在终端窗口输入命令行的形式来初始化数据库:

ps c:/> flask --app init-db

# flaskr/db.py
from flask_sqlalchemy import SQLAlchemy
from flask import Flask,current_app,g

from sqlalchemy import create_engine,Engine,text
from sqlalchemy.orm import sessionmaker
import click


#采用orm来初始化数据库
def initialize_db(app:Flask):
    with app.app_context():
        if 'db' not in g:
            g.db = SQLAlchemy(app)
            import flaskr.models
        g.db.create_all()
    print("db-models create successfully!")
    
# 采用sql语句的方式来初始化数据库
def get_db():
    if 'db' not in g:
        g.db = create_engine(current_app.config.get("SQLALCHEMY_DATABASE_URI"))
        
    return g.db

# 关闭数据库
def close_db(e=None):
    db:Engine = g.pop('db',None)
    Session = sessionmaker(bind=db)
    db_session = Session()
    
    if db is not None:
        db_session.close()

# 通过读取flaskr/schema.sql的sql语句来,来创建数据表        
def init_db():
    db = get_db()

    with current_app.open_resource('schema.sql',mode="r") as f:
        Session = sessionmaker(bind=db)
        db_session = Session()
        script = f.read()  
        
        # 分割 SQL 语句(这里假设每个语句以分号结束)  
        statements = script.strip().split(';')  
        
        # 逐条执行 SQL 语句  
        for statement in statements:  
            # 跳过空语句  
            if statement.strip():  
                print(statement)
                db_session.execute(text(statement)) 

# 通过导入click模块的command命令来实现从终端命令实现数据表的初始化
@click.command('init-db')
def init_db_command():
    """Clear the existing data and create new tables."""
    init_db()
    click.echo('Initialized the database.')

def init_app(app):
    # app.teardown_appcontext(close_db)
    app.cli.add_command(init_db_command)

采用的建表SQL语句如下:

在flaskr\schema.sql路径下

DROP TABLE IF EXISTS blog;
DROP TABLE IF EXISTS user;

CREATE TABLE user (
id INTEGER PRIMARY KEY AUTO_INCREMENT,
username varchar(20) UNIQUE NOT NULL,
password_hash varchar(255) NOT NULL
);

CREATE TABLE blog (
id INTEGER PRIMARY KEY AUTO_INCREMENT,
author_id INTEGER NOT NULL,
created TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
title varchar(50) NOT NULL,
body TEXT NOT NULL,
FOREIGN KEY (author_id) REFERENCES user (id)
);

在本项目中通过逐条读取schema.sql语句中的文本,来执行sql语句,直到所有的sql语句读取、执行完毕。


标签:语句,FLASK,数据库,db,init,sql,2.2,app
From: https://www.cnblogs.com/leo130-blogs/p/18156020

相关文章

  • mysql 数据库远程连接
    安装mysqlwindows的安装相对简单不做演示演示使用redhat9安装mysql:使用yum对关键字进行搜索:yumsearchmysql安装:yuminstallmysql-server启动服务:systemctlstartmysqld尝试进入mysql视图:默认没有密码输入命令:mysql然后给root赋予一个密码默认用户表存储在mysql.......
  • SQL Server实战一:创建、分离、附加、删除、备份数据库
      本文介绍基于MicrosoftSQLServer软件,实现数据库创建、分离、附加、删除与备份的方法。目录1交互式创建数据库2Transact-SQL指定参数创建数据库3交互式分离数据库testbase14使用系统存储过程分离数据库testbase25数据库文件备份:分离数据库再复制其物理文件6数据库文件......
  • Pandas 2.2 中文官方教程和指南(十五)
    原文:pandas.pydata.org/docs/处理文本数据原文:pandas.pydata.org/docs/user_guide/text.html文本数据类型在pandas中有两种存储文本数据的方式:object-dtypeNumPy数组。StringDtype扩展类型。我们建议使用StringDtype来存储文本数据。在pandas1.0之前,ob......
  • Pandas 2.2 中文官方教程和指南(十四)
    原文:pandas.pydata.org/docs/重塑和透视表原文:pandas.pydata.org/docs/user_guide/reshaping.htmlpandas提供了用于操作Series和DataFrame的方法,以改变数据的表示形式,以便进行进一步的数据处理或数据汇总。pivot()和pivot_table():在一个或多个离散类别中对唯一值进行......
  • Pandas 2.2 中文官方教程和指南(五)
    原文:pandas.pydata.org/docs/与SAS的比较译文:pandas.pydata.org/docs/getting_started/comparison/comparison_with_sas.html对于来自SAS的潜在用户,本页面旨在演示如何在pandas中执行不同的SAS操作。如果您是pandas的新手,您可能首先想通过阅读10分钟入门pandas......
  • Pandas 2.2 中文官方教程和指南(四)
    原文:pandas.pydata.org/docs/与SQL比较原文:pandas.pydata.org/docs/getting_started/comparison/comparison_with_sql.html由于许多潜在的pandas用户对SQL有一定的了解,本页旨在提供使用pandas执行各种SQL操作的一些示例。如果你是pandas的新手,你可能想先阅读......
  • Pandas 2.2 中文官方教程和指南(一)
    原文:pandas.pydata.org/docs/安装原文:pandas.pydata.org/docs/getting_started/install.html安装pandas的最简单方法是作为Anaconda发行版的一部分安装,这是一个用于数据分析和科学计算的跨平台发行版。Conda包管理器是大多数用户推荐的安装方法。还提供了从源代码安装(#i......
  • Pandas 2.2 中文官方教程和指南(十二)
    原文:pandas.pydata.org/docs/MultiIndex/高级索引原文:pandas.pydata.org/docs/user_guide/advanced.html本节涵盖了使用MultiIndex进行索引和其他高级索引功能。查看数据索引和选择以获取一般索引文档。警告在设置操作中返回副本还是引用可能取决于上下文。有时这被......
  • Pandas 2.2 中文官方教程和指南(十六)
    原文:pandas.pydata.org/docs/处理缺失数据原文:pandas.pydata.org/docs/user_guide/missing_data.html被视为“缺失”的值pandas使用不同的标记值来表示缺失值(也称为NA),具体取决于数据类型。numpy.nan适用于NumPy数据类型。使用NumPy数据类型的缺点是原始数据类型将......
  • Pandas 2.2 中文官方教程和指南(十三)
    原文:pandas.pydata.org/docs/写时复制(CoW)原文:pandas.pydata.org/docs/user_guide/copy_on_write.html注意写时复制将成为pandas3.0的默认设置。我们建议现在就启用它以从所有改进中受益。写时复制首次引入于版本1.5.0。从版本2.0开始,大部分通过CoW可能实现和支持......