首页 > 代码库 > Flask SQLAlchemy & model
Flask SQLAlchemy & model
Flask-SQLAlchemy
Flask-SQLAlchemy库让flask更方便的使用SQLALchemy,是一个强大的关系形数据库框架,既可以使用orm方式操作数据库,也可以使用原始的SQL命令.
配置Flask-SQLAlchemy
示例:
MySQL:
mysql://username:password@hostname/database
定义模型
from sqlalchemy import Column, Integer, MetaData, VARCHAR from flask_sqlalchemy import SQLAlchemy from flask import Flask app = Flask(__name__) #配置数据库地址 app.config[‘SQLALCHEMY_DATABASE_URI‘] = ‘mysql://root:wjjf2008@127.0.0.1:3306/internet_plus?charset=utf8‘ #该配置为True,则每次请求结束都会自动commit数据库的变动 app.config[‘SQLALCHEMY_COMMIT_ON_TEARDOWN‘] = True db = SQLAlchemy(app) #也可以db = SQLAlchemy() db.init_app(app) class User(db.Model): #使用继承至db.Model的类来定义模型 __tablename__ = ‘User‘ #if use Declarative,tablename is needed user_id = db.Column(‘user_id‘, db.Integer, autoincrement=True, primary_key = True) user_name = db.Column(‘user_name‘, db.VARCHAR(20), nullable=False, unique=True, default=‘‘) user_phone = db.Column(‘user_phone‘, db.VARCHAR(20), nullable=False, default=‘‘) user_email = db.Column(‘user_email‘, db.VARCHAR(30), nullable=False, default=‘‘) def __repr__(self): return ‘<User %r>‘ % self.user_name if __name__ == ‘__main__‘: db.create_all() #创建数据库
常用字段选项:
primary_key 设置主键
unique 是否唯一
index 是否创建索引
nullable 是否允许为空
default 设置默认值,可以传入函数的引用 如传入 datetime.datetime.utcnow 则每次创建时时间都是最新时间
数据库操作
- 插入数据
from models2 import User, db from flask_sqlalchemy import SQLAlchemy #建立一个新用户 u = User(); u.user_name = ‘Jeffrey‘ u.user_phone = ‘15958360766‘ u.user_email = ‘729957621@qq.com‘ #将用户添加到数据库会话中 db.session.add(u) #将数据库会话中的变动提交到数据库中,如果不Commit,数据库中是没有改动的 db.session.commit()
- 查找数据
#返回所有用户保存到list中 user_list = User.query.all() #查找username为abc的第一个用户,返回用户实例 user_list = User.query.filter_by(user_name=‘Jeffrey‘).first()
- 删除数据
u = User.query.first()
db.session.delete(u)
db.session.commit()
- 修改数据
u = User.query.first() u.username = ‘sb‘ db.session.commit()
另一种使用数据库的方法
from sqlalchemy import Column, Integer, MetaData, VARCHAR from sqlalchemy import create_engine from sqlalchemy.ext.declarative import declarative_base from sqlalchemy.orm import sessionmaker from flask.ext.sqlalchemy import SQLAlchemy metadata = MetaData() Base = declarative_base(metadata=http://www.mamicode.com/metadata) db = ‘mysql://root:mysqlpassword@127.0.0.1:3306/dbname?charset=utf8‘ def get_session(): #此处返回一个session #create_engine() 会返回一个数据库引擎,echo 参数为 True 时,会显示每条执行的 SQL 语句,生产环境下可关闭。 engine = create_engine(db, encoding="utf-8") #sessionmaker() 会生成一个数据库会话类。这个类的实例可以当成一个数据库连接,它同时还记录了一些查询的数据,并决定什么时候执行 SQL 语句。 mysql_session_maker = sessionmaker(bind=engine) session = mysql_session_maker() ‘‘‘ # 拿到 session 后,就可以执行 SQL 了 session.execute(‘create database abc‘) print(session.execute(‘show databases‘).fetchall()) session.execute(‘use abc‘) # 建 user 表的过程略 print session.execute(‘select * from user where id = 1‘).first() print session.execute(‘select * from user where id = :id‘, {‘id‘: 1}).first() ‘‘‘ return session sql_session = get_session() class User(Base): __tablename__ = ‘User‘ #if use Declarative,tablename is needed user_id = Column(‘user_id‘, Integer, autoincrement=True, primary_key = True) user_name = Column(‘user_name‘, VARCHAR(20), nullable=False, unique=True, default=‘‘) user_phone = Column(‘user_phone‘, VARCHAR(20), nullable=False, default=‘‘) user_email = Column(‘user_email‘, VARCHAR(30), nullable=False, default=‘‘) if __name__ == ‘__main__‘: #定义一个表 engine = create_engine(db, encoding="utf-8", echo=True) Base.metadata.create_all(engine) print(sql_session.query(User).count())
Flask SQLAlchemy & model
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。