码迷,mamicode.com
首页 > 数据库 > 详细

Flask-SQLAlchemy

时间:2018-09-21 18:25:07      阅读:215      评论:0      收藏:0      [点我收藏+]

标签:python程序   cal   index   add   set   语言   查看   映射   commit   

1. 介绍

  SQLAlchemy是一个基于Python实现的ORM框架,能满足大多数数据库操作需求,同时支持多种数据库引擎(SQLite,MySQL,Postgresql,Oracle等)

  SQLAlchemy组件中最有名的是它的对象关系映射器(ORM)

  ORM 将数据库中的表与面向对象语言中的类建立了一种对应关系

  这样,我们要操作数据库,数据库中的表或者表中的一条记录就可以直接通过操作类或者类实例来完成。
  优点:

    对数据表的抽象,允许开发人员首先考虑数据模型,同时使得Python程序更加简洁易读。
    对各种数据库引擎的封装,使得开发人员在面对不同数据库时,只需要做简单修改即可,工作量大大减少。

2.使用

  SQLAlchemy本身无法操作数据库,必须依赖pymsql等第三方插件。根据配置文件的不同调用不同的数据库API,从而实现对数据库的操作

MySQL-Python
    mysql+mysqldb://<user>:<password>@<host>[:<port>]/<dbname>
    
pymysql
    mysql+pymysql://<username>:<password>@<host>/<dbname>[?<options>]
    
MySQL-Connector
    mysql+mysqlconnector://<user>:<password>@<host>[:<port>]/<dbname>
    
cx_Oracle
    oracle+cx_oracle://user:pass@host:port/dbname[?key=value&key=value...]
    

其他可参考此处:http://docs.sqlalchemy.org/en/latest/dialects/index.html

 2.1 使用flask-sqlalchemy的使用

from flask import Flask
from flask_sqlalchemy import SQLAlchemy

app = Flask(__name__)

# 数据库类型://用户名:密码(没有密码则为空,不填)@数据库主机地址/数据库名?编码
DB_URL = mysql+pymysql://root:@localhost/test?charset=utf8

# 添加到全局配制中,这步必学要有
app.config[SQLALCHEMY_DATABASE_URI] = DB_URL
app.config[SQLALCHEMY_TRACK_MODIFICATIONS] = False

db = SQLAlchemy(app)


class Parent(db.Model):
    __tablename__ = parent
    id = db.Column(db.Integer, primary_key=True)
    par_name = db.Column(db.String(50), nullable=False)
    children = db.relationship("Child", backref="parent")
   # 在父表类中通过relationship() 方法来引用子表的类集合
   # 当我们需要在父表中添加子表关系时使用 relationship,这样子表将会在多对一的关系中通过.parent的方式获得父表的属性


class Child(db.Model):
    __tablename__ = child
    id = db.Column(db.Integer, primary_key=True)
    child_name = db.Column(db.String(50), nullable=False)
    parent_id = db.Column(db.Integer, db.ForeignKey(parent.id))
    # 在子表类中通过 foreign key (外键)引用父表的参考字段


# db.drop_all()         #删除表
# db.create_all()       #创建表


# 添加数据
# par1 = Parent(par_name=‘爸爸1‘)
# par2 = Parent(par_name=‘爸爸2‘)
# chi = Child(child_name=‘儿子1‘,parent_id=2)

# db.session.add(par1)
# db.session.add(par2)
# db.session.add(chi)
# db.session.commit()


# 查看数据
# par =Parent.query.all()
# print(par)  # [<Parent 1>, <Parent 2>]

# chi = Child.query.filter(Child.parent_id).first().child_name
# print(chi)  # 儿子1


# 修改数据
# chi = Child.query.filter(Child.parent_id).first()
# chi.child_name = "好儿子"
# db.session.commit()     # 刷新数据库,可以看见数据已经更新


# 删除数据
# par =Parent.query.filter(Parent.id==1).first()
# db.session.delete(par)
# db.session.commit()     # 刷新数据库,id=1的数据已经不存在


@app.route(/)
def hello_world():
    return Hello World!

if __name__ == __main__:
    app.run(port=5050)

最终的效果

技术分享图片

2.2 直接使用sqlalchemy 

 

Flask-SQLAlchemy

标签:python程序   cal   index   add   set   语言   查看   映射   commit   

原文地址:https://www.cnblogs.com/LearningOnline/p/9672709.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!