數據庫
app
from flask import Flask
from flask_script import Manager
from App. ext import db
from App. views import bp
app = Flask( __name__)
app. config. from_pyfile( "settings.py" )
manager = Manager( app)
db. init_app( app)
app. register_blueprint( bp)
if __name__ == '__main__' :
manager. run( )
APP.ext
from flask_sqlalchemy import SQLAlchemy
db = SQLAlchemy( )
settings
DEBUG = True
SQLALCHEMY_DATABASE_URI = "mysql+pymysql://root:[email protected] :3306/day04"
SQLALCHEMY_TRACK_MODIFICATIONS = False
App.views
select [字段列表]
from [表名]
[where]
[group by]
[having]
[order by]
[limit]
from flask import Blueprint, render_template, redirect, url_for
from App. models import User, db
bp = Blueprint( 'bp' , __name__, url_prefix= '/bp' )
@bp. route( "/update/" )
def db_update ( ) :
user = User. query. get( 1 )
print ( user)
user. password = "123"
if user:
db. session. delete( user)
db. session. commit( )
return "更新記錄"
@bp. route( "/change/" )
def db_change ( ) :
user = User( username= '華爲' , password= '123' )
user. save( )
from hashlib import sha1
user = User. query. get( 3 )
if user:
user. password = sha1( "23423" . encode( 'utf8' ) ) . hexdigest( )
user. save( )
user = User. query. get( 3 )
if user:
user. delete( )
user1 = User( username= "李澤" , password= '123' )
user2 = User( username= "駱鑫" , password= '123' )
User. save_all( user1, user2)
return "change"
@bp. route( "/find/" )
def find ( ) :
users = User. query. get( 3 )
if users:
print ( users, type ( users) )
users = User. query. all ( )
users = User. query. first( )
users = User. query. with_entities( User. username, User. uid) . all ( )
users = db. session. query( User) . with_entities( User. username) . all ( )
users = db. session. query( User. password) . distinct( ) . all ( )
users = User. query. order_by( - User. uid) . all ( )
users = User. query. order_by( - User. sex, - User. password) . all ( )
from sqlalchemy import func
users = db. session. query( func. count( User. username) ) . all ( )
users = db. session. query( func. count( User. uid) ) . first( )
users = db. session. query( func. count( User. uid) ) . scalar( )
users = db. session. query( User) . count( )
users = db. session. query( func. max ( User. uid) ) . scalar( )
users = User. query. with_entities( func. min ( User. uid) ) . scalar( )
users = db. session. query( User. sex, func. count( User. uid) ) . group_by( User. sex) . all ( )
users = db. session. query( User. sex, func. count( User. sex) ) . group_by( User. sex) . having( func. count( User. sex) > 1 ) . all ( )
num = func. count( User. sex) . label( "num" )
users = db. session. query( User. sex, num) . group_by( User. sex) . having( num> 1 ) . all ( )
users = User. query. limit( 2 ) . all ( )
users = User. query. offset( 1 ) . limit( 1 ) . all ( )
users = User. query. filter ( User. uid== 2 ) . all ( )
users = User. query. filter ( User. uid!= 2 ) . all ( )
users = User. query. filter ( User. uid. __ne__( 2 ) ) . all ( )
users = User. query. filter ( User. uid!= 2 , User. uid< 5 ) . all ( )
users = User. query. filter ( User. username. like( "小%" ) ) . all ( )
users = User. query. filter ( User. username. like( '%雨%' ) ) . all ( )
users = User. query. filter ( User. uid. in_( [ 1 , 2 , 3 ] ) ) . all ( )
users = User. query. filter ( ~ User. uid. in_( [ 1 , 2 , 3 ] ) ) . all ( )
users = User. query. filter ( User. uid. notin_( [ 1 , 2 , 3 ] ) ) . all ( )
users = User. query. filter ( User. sex== None ) . all ( )
users = User. query. filter ( User. sex != None ) . all ( )
from sqlalchemy import or_, not_
users = User. query. filter ( or_( User. sex== None , User. uid< 5 ) ) . all ( )
users = User. query. filter ( not_( User. sex== None ) ) . all ( )
print ( users)
return render_template( 'list.html' , ** locals ( ) )
@bp. route( "/many/" )
def db_union ( ) :
data = db. session. query( User, Reply) . all ( )
select * from User u, Reply r where u. uid= r. uid
data = db. session. query( User, Reply) . filter ( User. uid== Reply. uid) . all ( )
data = User. query. outerjoin( Reply) . all ( )
print ( data)
return "多表聯合查詢"
App.models
from App. ext import db
class BaseModel :
def save ( self) :
try :
db. session. add( self)
db. session. commit( )
return True
except Exception as e:
print ( e)
db. session. rollback( )
return False
@classmethod
def save_all ( cls, * args) :
try :
db. session. add_all( args)
db. session. commit( )
return True
except Exception as e:
print ( e)
db. session. rollback( )
return False
def delete ( self) :
try :
db. session. delete( self)
db. session. commit( )
return True
except Exception as e:
print ( e)
db. session. rollback( )
return False
class User ( db. Model, BaseModel) :
uid = db. Column( db. Integer, primary_key= True , autoincrement= True )
username = db. Column( db. String( 30 ) , nullable= False )
password = db. Column( db. String( 128 ) , nullable= False )
sex = db. Column( db. Boolean, default= False , name= 'gender' )
__tablename__ = 'user'
def __str__ ( self) :
return "{} {}" . format ( self. uid, self. username)
class Reply ( db. Model) :
__tablename__ = 'reply'
rid = db. Column( db. Integer, primary_key= True )
content = db. Column( db. String( 3000 ) )
uid = db. Column( db. Integer)
create_time = db. Column( db. DateTime)
list.html
< !DOCTYPE html>
< html lang= "en" >
< head>
< meta charset= "UTF-8" >
< title> 用戶列表< / title>
< / head>
< body>
< table>
{ % if users is iterable % }
{ % for user in users % }
< tr>
< td> { { user. username } } < / td>
< td> { { user. password } } < / td>
< td> { { user. sex } } < / td>
< / tr>
{ % endfor % }
{ % endif % }
{ % if users is not iterable % }
< tr>
< td> { { users. username } } < / td>
< td> { { users. password } } < / td>
< td> { { user. sex } } < / td>
< / tr>
{ % endif % }
< / table>
< / body>
< / html>