flask——SQL Alchemy基本使用

flask SQL Alchemy基本使用

根据知了传课进行学习,记录学习笔记

安装mysql

安装完后在终端并不能识别 mysql 命令,需要配置一下

  $ cd /usr/local/bin/
  $ sudo ln -fs /usr/local/mysql/bin/mysql mysql
  $ mysql --version
  #能显示 mysql 版本说明 mysql 安装成功

SQLAlchemy

1、SQLAlchemy:是一个独立的ORM框架,可以独立于Flask存在,也可以在其他项目中使用,比如在Django中
2、Flask-SQLAlchemy:对SQLAlchemy的一个封装,能够更适合在flask中使用
安装和验证:
1、安装:pip install flask-sqlalchemy
2、安装连接数据库的库:pip install pymysql
连接数据库

数据库的配置变量

HOSTNAME = '127.0.0.1'
PORT = '3306'
DATABASE = 'zl_flask'
USERNAME = 'root'
PASSWORD = '999999'
DB_URI = 'mysql+pymysql://{}:{}@{}:{}/{}?charset=utf8'.format(USERNAME, PASSWORD, HOSTNAME, PORT, DATABASE)
app.config['SQLALCHEMY_DATABASE_URI'] = DB_URI
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = True
db = SQLAlchemy(app)


@app.route('/')
def hello_world():  # put application's code here
    #写一个测试代码是否连接成功

    engine = db.get_engine()
    with engine.connect() as conn:
        result = conn.execute("select 1")
        print(result.fetchone())
    # conn = engine.connect()
    # conn.close()
    return 'Hello World!'


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

ORM映射与增删改查

ORM模型是数据库的表和简单java对象的映射关系模型
类与数据库中表的映射;
对象与表中记录的映射;
类的属性与数据库中表的字段的映射。
1、添加操作
#创建记录

article = Article(title="蒙娜丽莎", content="毕加索")

session存储

db.session.add(article)

1、做一个提交操作

db.session.commit()

2、查询操作

article = Article.query.filter_by(id=1)[0]
print(article.title)

3、修改数据

article = Article.query.filter_by(id=1)[0]
article.content = "修改"
db.session.commit()

4、删除数据

Article.query.filter_by(id=1).delete()
db.session.commit()

表的关系

一对多关系

建立user表

class User(db.Model):
    __tablename__ = "user"
    id = db.Column(db.Integer, primary_key=True, autoincrement=True)
    username = db.Column(db.String(200), nullable=False)

定义ORM模型

建立一个Article表

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

    # 外键:
    # 1、外键的类型一定要看索引用字段的类型
    # 2、db.ForeignKey("user.id")为"表名.字段名"(表名为__tablename__,字段名为id;username)
    # 3、外键是属于数据库层面的,不推荐直接在ORM中使用
    author_id = db.Column(db.Integer, db.ForeignKey("user.id"))

    # 我们使用relationship描述表之间的关系,用户User与书籍article是一对多的关系
    #1、第一个参数"User"是模型User,必须和模型的名字保持一致
    #2、backref(back reference):代表反向引用,代表对方访问我的时候的字段名称
    #3、必须要有外键相连
    author = db.relationship("User",backref="articles")

将模型映射到数据库中,在数据库中创建表

db.drop_all()
db.create_all()

测试函数

@app.route('/otm')
def one_to_many():
    article = Article(title="111",content="xxx")
    user = User(username="zhiliao")
    article.author = user
    #外键
    db.session.add(article)
    db.session.commit()
    return "one to many数据操作成功"

一对一关系

将用户不常用的数据存放在UserExtension中
与用户User的关系为一对一
一对一关系主要在relationship中设置uselist参数为False

class UserExtension(db.Model):
    __tablename__ = "user_extension"
    id = db.Column(db.Integer, primary_key=True, autoincrement=True)
    school = db.Column(db.String(100))
    user_id = db.Column(db.Integer, db.ForeignKey("user.id"))

    # db.backref
    # 1、在反向引用时,如果还需要传递一些其他的参数,那么就需要使用到这个函数,否则不需要使用,只要在relationship的backref参数上,设置反向引用的名称就可以了。
    # 2、uselist=False:代表反向引用的时候,不是一个列表,而是一个对象
    user = db.relationship("User", backref=db.backref("extension", uselist=False))

测试函数

@app.route("/oto")
def one_to_one():
    user = User(username="zzqq")
    extension = UserExtension(school="dhu")
    user.extension = extension
    db.session.add(user)
    db.session.commit()
    return "one to one"
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值