安装相关模块

  pip install flask-sqlalchemy

 

启动代码

from flask_sqlalchemy import SQLAlchemy
import datetime

app = Flask(__name__)
bootstrap = Bootstrap(app)
app.debug = True


app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///db/test.db'
app.config["SQLALCHEMY_TRACK_MODIFICATIONS"] = True
db = SQLAlchemy(app)


#这个模块一定要在db变量声明之后 
#否则在model.user模块中将引用不到db变量

from model.user import Userinfo

flask app.py

from app import db

class Userinfo(db.Model):

    id = db.Column(db.Integer, primary_key=True,autoincrement=True)
    name = db.Column(db.String(20),nullable=False,unique=True)
    passwd = db.Column(db.String(20),nullable=False)
    usertime=db.Column(db.DateTime,nullable=False)

    def __repr__(self):
        return '<User %r>' % self.name

models.user.py

 

实现初始化数据库数据

from model.user import Userinfo

@app.route('/')
def main():
    db.create_all()
    users=Userinfo.query.filter_by(name='admin').first()
    if not users:
        admin=Userinfo(name='admin',passwd='admin',usertime=datetime.datetime.now())
        db.session.add(admin)
        db.session.commit()
    return render_template('index.html', msg=m.loginmsg)

View Code

 

 

pycharm可视化打开sqlite

       首先打开database,一般在pycharm的右边侧栏中,也可以通过(View-->Tool Windows --> database)打开

       Data Source -> Sqlite(Xerial)

flask集成sqlalchemy_User

flask集成sqlalchemy_json_02

 

实现model的增删改查

# 查询所有用户
users_list = User.query.all()

# 查询用户名称为 test 的第一个用户, 并返回用户实例, 因为之前定义数据库的时候定义用户名称唯一, 所以数据库中用户名称为 test 的应该只有一个.
user = User.query.filter_by(username = 'test').first()
# or
user = User.query.filter(User.username == 'test').first()
# 查询用户 id, 用户 email, 用户 roles 类型

# 模糊查询, 查找用户名以abc 结尾的所有用户
users_list = User.query.filter(User.username.endsWith('c')).all()

#查询用户名不是 test 的第一个用户
user = User.query.filter(User.username != 'test').first()

# 根据用户名, 判断用户是否已经存在
    if User.query.filter_by(username=req_data['username']) is not None:
        return {'msg': '用户已存在'}
        
    # 创建一个新用户
    user = User()
    user.username = req_data['username']
    user.email = user.username + "@4paradigm.com"
    user.password = req_data['password']
    for user_id in req_data['roles']:
        role = Role.query.filter(Role.id == user_id).first()
        user.roles.append(role)
    
    # 将新创建的用户添加到数据库会话中
    db.session.add(user)
    # 将数据库会话中的变动提交到数据库中, 记住, 如果不 commit, 数据库中是没有变化的.
    db.session.commit()

添加

# 获取用户对象
user = User.qurey.filter_by(id = user_id).first()

# 修改用户信息
user.username = 'test_update'

# 提交数据库会话
db.session.commit()

修改

# 获取用户对象
user = User.qurey.filter_by(id = user_id).first()

# 删除用户
db.session.delete(user)

# 提交数据库会话
db.session.commit()

删除

 

日期和时间的计算处理

from datetime import date
from datetime import timedelta


class Userinfo(db.Model):  
   
  usertime=db.Column(db.Date,nullable=False,default=date.today())


date1 = user.usertime
date2 = date.today()
#date2 = date.today()+ timedelta(days=5)
# print(date1)
# print(date2)
# print((date2-date1).days,"**********")
tmpday=(date2-date1).days

date日期计算

from datetime import datetime
from datetime import timedelta

def get_date(days=N):
    return datetime.now() - timedelta(days=days)

datetime时间处理

 

flask实现单表数据序列化

from app import db
from datetime import date

class Userinfo(db.Model):

    id = db.Column(db.Integer,primary_key=True,autoincrement=True)
    name = db.Column(db.String(20),nullable=False,unique=True)
    passwd = db.Column(db.String(20),nullable=False)
    type =db.Column(db.Integer,nullable=False)
    usertime=db.Column(db.Date,nullable=False,default=date.today())

    def __repr__(self):
        return '<User %r>' % self.name

    def to_json(self):
        jsonstr = {
            'id': self.id,
            'name': self.name,
            'type': self.type,
            'usertime': self.usertime.strftime("%Y-%m-%d"),
            'aaa':"bbbbbb"
        }
        return jsonstr

需要序列化的model

@app.route('/users',methods=['GET'])
def get_users():
    users = Userinfo.query.all()
    res=[]
    for user in users:
        obj=user.to_json()
        res.append(obj)
    return jsonify({'users': res})

views中序列化

 

flask实现关联表序列化

artist_songs = db.Table('artist_songs',
      db.Column('song_id', db.Integer, db.ForeignKey('songs.id')),
      db.Column('artist_id', db.Integer, db.ForeignKey('artists.id'))
)


class songs(db.Model):

    __tablename__ = 'songs'
    id = db.Column(db.Integer, primary_key=True, autoincrement=True)
    title = db.Column(db.String(255), nullable=True)
    lyrics = db.Column(db.Text(), nullable=True)
    created_at = db.Column(db.DateTime, nullable=False)
    artists = db.relationship('artists', secondary=artist_songs, backref=db.backref('artists'), lazy="select")
    lyric_copies = db.relationship('lyric_copies', backref='songs', lazy='select')

    def jsonstr(self):
        artist = []
        if self.artists is not None and len(self.artists) != 0:
            for art in self.artists:
                artist.append(art.name)

        lyricarr = []
        if self.lyric_copies is not None and len(self.lyric_copies) != 0:
            for lyr in self.lyric_copies:
                lyricarr.append(lyr.jsonstr())

        jsondata = {
            'ID': self.id,
            'title': self.title,
            'artist': artist,
            'lyric': self.lyrics,
            'copyrights': {
                'lyric': lyricarr
            }
        }
        return jsondata


class artists(db.Model):
    __tablename__ = 'artists'
    id = db.Column(db.Integer, primary_key=True, autoincrement=True)
    name = db.Column(db.String(255), nullable=True)
    gender = db.Column(db.Integer, nullable=True)
    location = db.Column(db.String(255), nullable=True)
    created_at = db.Column(db.DateTime, nullable=False)
    updated_at = db.Column(db.DateTime, nullable=False)

models