Flask sql常见基本操作(建表,增删改查,外键约束)

一.代码结构

Flask sql常见基本操作(建表,增删改查,外键约束)_第1张图片

二.依赖包

独立一个虚拟环境,在一中为venv
Flask sql常见基本操作(建表,增删改查,外键约束)_第2张图片
虚拟环境的设置可自行百度

三.各个文件中代码

1.config.py

DIALECT = 'mysql'
DRIVER = 'mysqldb'
USERNAME = '自己数据库的用户名'
PASSWORD = '数据的密码'
HOST = '127.0.0.1'
PORT = '3306'
DATABSE = '数据库名称'

SQLALCHEMY_DATABASE_URI = "{}+{}://{}:{}@{}:{}/{}?charset=utf8".format(DIALECT,DRIVER,USERNAME,PASSWORD,HOST,PORT,DATABSE)
SQLALCHEMY_TRACK_MODIFICATIONS = False

2.falsk sql的一些基本操作

from flask import Flask
from flask_sqlalchemy import SQLAlchemy
import config

app = Flask(__name__)
app.config.from_object(config)

db = SQLAlchemy(app)


# create table article( 创建的数据库结构 # 不用去控制台或者连接数据库创建,运行完class Article会自动创建该表
# 		id int PRIMARY KEY AUTO_INCREMENT,
# 		title VARCHAR(100) not null,
# 		content text not NULL
# );

class Article(db.Model):
    __tablename__ = 'article'
    id = db.Column(db.Integer,primary_key=True,autoincrement=True)
    title = db.Column(db.String(100),nullable=False)
    content = db.Column(db.Text,nullable=False)


db.create_all()

@app.route('/Flask_sql1')
def Flask_sql1():
    # 增
    artile_1 = Article(title='bbb', content='bbb_content')
    db.session.add(artile_1)  # 数据的增加
    db.session.commit()  # 事务

    # 查
    # select *from artile
    result = Article.query.filter(Article.title == 'aaa').all()  ## 返回数据类型类似 list
    article = result[0]
    print("title: {},content: {}".format(article.title, article.content))

    # 改
    result = Article.query.filter(Article.title == 'aaa')
    article = result[0]
    article.title = 'new title'
    db.session.commit()

    # 删
    result = Article.query.filter(Article.title == 'bbb')
    article = result[0]
    db.session.delete(article)
    db.session.commit()
    print(result)

    """
    # SELECT article.id AS article_id, article.title AS article_title, article.content AS article_content
    # FROM article
    # WHERE article.title = %s
    """

    return 'Hello World!'


if __name__ == '__main__':
    app.run(debug=True)

3.falsk的数据库外键

from flask import Flask
from flask_sqlalchemy import SQLAlchemy
import config

app = Flask(__name__)
app.config.from_object(config)

db = SQLAlchemy(app)


# CREATE table users(
# 		id int PRIMARY KEY auto_increment,
# 		username VARCHAR(100) not NULL
# );
# drop table article;
# CREATE TABLE article(
# 		id int PRIMARY KEY auto_increment,
# 		title VARCHAR(100) not null,
# 		content text not null,
# 		author_id int,
# 		FOREIGN KEY article(author_id) REFERENCES users(id)
# );

class User(db.Model):
    __tablename__ = 'users'
    id = db.Column(db.Integer,primary_key=True,autoincrement=True)
    username = db.Column(db.String(100),nullable=False)

class Article(db.Model):
    __tablename__ = 'article'
    id = db.Column(db.Integer,primary_key=True,autoincrement=True)
    title = db.Column(db.String(100),nullable=False)
    content = db.Column(db.Text,nullable=False)
    author_id = db.Column(db.Integer,db.ForeignKey('users.id'))

    # 反向引用,通过文章找作者
    author = db.relationship('User',backref=db.backref('articles'))

db.create_all()

@app.route('/')
def hello_world():
    # 添加一位作者
    user1 = User(username = 'jzj')
    db.session.add(user1)
    db.session.commit()

    # 给上面作者添加一个文章
    article1 = Article(title='Python',content='两天速成flask',author_id = 1)
    db.session.add(article1)
    db.session.commit()

    # 找到文章标题为flask的作者
    article = Article.query.filter(Article.id == 2).first()
    print(article)
    author_id = article.author_id
    user = User.query.filter(User.id == author_id).first()
    print(user.username)

    # 修改表之后再添加一个文章
    article = Article(title='Python速成',content='Python从入门到精通,走上人生巅峰')
    article.author = User.query.filter(User.id == 1).first()
    db.session.add(article)
    db.session.commit()
    article = Article(title='Flask',content='Flask从入门到精通,走上人生巅峰')
    article.author = User.query.filter(User.id == 1).first()
    db.session.add(article)
    db.session.commit()


    # 找文章标题为 Python速成 的作者
    article = Article.query.filter(Article.title == 'Python速成').first()
    print("username:{}".format(article.author.username))

    # 找 jzj 写过的所有书
    user = User.query.filter(User.username == 'jzj').first()
    articles = user.articles
    for article in articles:
        print(" {}".format(article.title))

    return 'Flask sqlForeign!'


if __name__ == '__main__':
    app.run()

你可能感兴趣的:(python,flask)