当前位置:Gxlcms > 数据库问题 > Flask SQLAlchemy & model

Flask SQLAlchemy & model

时间:2021-07-01 10:21:17 帮助过:4人阅读

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=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

标签:cut   show   als   选项   请求   import   时间   mode   sel   

人气教程排行