from flask import Flask,session from flask_sqlalchemy import SQLAlchemy import config app = Flask(__name__) app.config.from_object(config) db = SQLAlchemy(app) class User(db.Model): __tablename__ = 'user' id = db.Column(db.Integer,primary_key=True,autoincrement=True) username = db.Column(db.String(100),nullable=False) class Article(db.Model): __tablename__ = 'article' id = db.Column(db.Integer,primary_key=True,autoincrement=True) title = db.Column(db.String(100),nullable=False) content = db.Column(db.Text,nullable=False)
# 關聯表,這裏要與相關聯的表的類型一直, user.id 表示關聯到user表下的id字段 author_id = db.Column(db.Integer,db.ForeignKey('user.id'))
#給這個article模型添加一個author屬性(關係表),User爲要鏈接的表,backref爲定義反向引用 author = db.relationship('User',backref=db.backref('articles'),lazy='dynamic') #lazy表示禁止自動查詢 db.create_all() @app.route('/') def index():
#添加數據 user1 = User(username="test_flask2") db.session.add(user1) article = Article(title='eeee',content='cfffff',author_id=1) #注意,這裏的author_id必須存在,即user表下的id字段的內容必須存在 db.session.add(article) db.session.commit()
#查詢數據---常規方法 article = Article.query.filter(Article.title=="eeee").first() author_id = article.author_id user = User.query.filter(User.id==author_id) #獲取user表的全部數據 print (user.username) #獲取User表下的username字段的內容
#經過sqlalchemy實現查詢數據
article = Article.query.filter(Article.title=="eeee").first()
print (article.author.username) #打印username字段的內容,
user = User.query.filter(User.username=="test_flask3").first()
print (user.articles) #查詢全部的文章(結果爲列表),這裏須要注意的是這裏的articles要與 article表下author字段裏的backref設定的articles 字符串相同
return 'Hello World!' if __name__ == '__main__': app.run(host='192.168.132.130',debug=True)
示例:python
#!/usr/bin/env python #-*-coding:utf-8-*- import datetime from movie_project import db #用戶 class User(db.Model): __tablename__ ="user" id = db.Column(db.Integer,primary_key=True) name = db.Column(db.String(100),nullable=False,unique=True) #unique表明不能重複,惟一的 pwd = db.Column(db.String(100),nullable=False) email = db.Column(db.String(64),nullable=False,unique=True) phone = db.Column(db.String(11),nullable=False,unique=True) info = db.Column(db.Text) face = db.Column(db.String(100)) #頭像 addtime = db.Column(db.DateTime,index=True,default=datetime.datetime.now) uuid = db.Column(db.String(255)) userlogs = db.relationship('UserLog',backref='user') #外鍵關係關聯 comments = db.relationship('Comment',backref='user') movicols = db.relationship('Moviecol', backref='user') def __repr__(self): #定義返回的類型 return '<user %r>' % self.name def check_pwd(self,pwd): from werkzeug.security import check_password_hash return check_password_hash(self.pwd,pwd) #登陸日誌 class UserLog(db.Model): __tablename__ = 'userlog' id = db.Column(db.Integer,primary_key=True) user_id = db.Column(db.Integer,db.ForeignKey('user.id')) ip = db.Column(db.String(30)) addtime = db.Column(db.DateTime,index=True,default=datetime.datetime.now) def __repr__(self): return '<userlog %r>' % self.id #標籤數據模型 class Tag(db.Model): __tablename__ = 'tag' id = db.Column(db.Integer,primary_key=True) name = db.Column(db.String(100),unique=True) addtime = db.Column(db.DateTime,index=True,default=datetime.datetime.now) movies = db.relationship('Movie',backref='tag') def __repr__(self): return '<tag %r>' % self.name #電影模型 class Movie(db.Model): __tablename__ = 'movie' id = db.Column(db.Integer,primary_key=True) title = db.Column(db.String(20),unique=True) url = db.Column(db.String(255),unique=True) #地址 info = db.Column(db.Text) #簡介 logo = db.Column(db.String(255),unique=True) #封面 star = db.Column(db.SmallInteger) #星級 playnum = db.Column(db.BigInteger) #播放量 commentnum = db.Column(db.BigInteger) #評論量 tag_id = db.Column(db.Integer,db.ForeignKey('tag.id')) area = db.Column(db.String(255)) #上映地區 replease_time = db.Column(db.Date) #上映時間 length = db.Column(db.String(100)) addtime = db.Column(db.DateTime,index=True,default=datetime.datetime.now) comments = db.relationship('Comment',backref='movie') moviecols = db.relationship('Moviecol', backref='movie') def __repr__(self): return '<movie %r>' % self.title class Preview(db.Model): __tablename__ = 'preview' id = db.Column(db.Integer, primary_key=True) title = db.Column(db.String(20), unique=True) logo = db.Column(db.String(255), unique=True) addtime = db.Column(db.DateTime, index=True, default=datetime.datetime.now) def __repr__(self): return '<preview %r>' % self.title #評論 class Comment(db.Model): id = db.Column(db.Integer, primary_key=True) content = db.Column(db.Text) movie_id = db.Column(db.Integer,db.ForeignKey('movie.id')) user_id = db.Column(db.Integer,db.ForeignKey('user.id')) addtime = db.Column(db.DateTime,index=True,default=datetime.datetime.now) def __repr__(self): return '<content %r>' % self.content #電影收藏 class Moviecol(db.Model): __tablename__ = 'moviecol' id = db.Column(db.Integer, primary_key=True) movie_id = db.Column(db.Integer, db.ForeignKey('movie.id')) user_id = db.Column(db.Integer, db.ForeignKey('user.id')) addtime = db.Column(db.DateTime, index=True, default=datetime.datetime.now) def __repr__(self): return '<Moviecol %r>' % self.id #權限及角色數據模型 class Auth(db.Model): __tablename__ = 'auth' id = db.Column(db.Integer, primary_key=True) name = db.Column(db.String(20),unique=True) #權限名稱 url = db.Column(db.String(255),unique=True) addtime = db.Column(db.DateTime, index=True, default=datetime.datetime.now) def __repr__(self): return '<auth %r>' % self.name #角色模型 class Role(db.Model): __tablename__ = 'role' id = db.Column(db.Integer, primary_key=True) name = db.Column(db.String(20), unique=True) # 權限名稱 auths = db.Column(db.String(600)) addtime = db.Column(db.DateTime, index=True, default=datetime.datetime.now) def __repr__(self): return '<Role %r>' % self.name #管理員數據模型 class Admin(db.Model): __tablename= 'admin' id = db.Column(db.Integer, primary_key=True) name = db.Column(db.String(100), nullable=False, unique=True) # unique表明不能重複,惟一的 pwd = db.Column(db.String(100), nullable=False) is_super = db.Column(db.SmallInteger) #是否爲超級管理員 role_id = db.Column(db.Integer,db.ForeignKey('role.id')) addtime = db.Column(db.DateTime, index=True, default=datetime.datetime.now) adminlogs = db.relationship('Adminlog',backref='admin') adminoption = db.relationship('Oplogs', backref='admin') def __repr__(self): return '<Admin %r>' % self.name def check_pwd(self,pwd): from werkzeug.security import check_password_hash return check_password_hash(self.pwd,pwd) #管理員登陸日誌 class Adminlog(db.Model): __tablename__ = 'adminlog' id = db.Column(db.Integer, primary_key=True) admin_id = db.Column(db.Integer, db.ForeignKey('admin.id')) ip = db.Column(db.String(30)) addtime = db.Column(db.DateTime, index=True, default=datetime.datetime.now) def __repr__(self): return '<Admin %r>' % self.name #操做日誌 class Oplogs(db.Model): __tablename__ = 'oplogs' id = db.Column(db.Integer, primary_key=True) admin_id = db.Column(db.Integer, db.ForeignKey('admin.id')) ip = db.Column(db.String(30)) reason = db.Column(db.String(600)) #操做緣由 addtime = db.Column(db.DateTime, index=True, default=datetime.datetime.now) def __repr__(self): return '<oplog %r>' % self.id if __name__ == '__main__': db.create_all() # from werkzeug.security import generate_password_hash # role = Role( # name="超級管理員", # auths = '' # ) # admin = Admin( # name="test", # pwd=generate_password_hash("test"), # is_super=0, # role_id=1 # ) # db.session.add(role) # db.session.add(admin) # db.session.commit()
sqlalchemy 查詢過濾器sql