1. 程式人生 > >Flask SQLAlchemy 資料庫筆記

Flask SQLAlchemy 資料庫筆記

title: Flask SQLAlchemy 資料庫
copyright: true
top: 0
date: 2018-07-24 13:27:03
tags: [Flask 資料庫,sqlalchemy,資料庫對映]
categories: Flask
permalink:
password:
keywords: [Flask 資料庫,sqlalchemy,資料庫對映]
description: Flask使用資料庫模型,處理對映關係,定義基礎的模型類。使用不同的連線資料庫的方式建立與連線資料庫。

看著一雙美麗的眼睛流動著對那個時代的嚮往,不由得讓人也期待啊。

建立資料庫方式

  1. Database First # 使用navicat圖形化管理工具一步一步建立
  2. Moedl First # 使用navicat的畫圖工具畫出結構,然後自動生成
  3. Code First # 用Python寫好資料庫的模型,不用專門寫SQL語句,主要解決建立資料的問題,專注於業務模型的設計。

模型建立與對映

模型概念

關於MVC方式,個人這麼理解:

M --> model模組,主要的核心函式處理模組,負責處理大部分的業務的業務模型
V --> view模組,檢視模組,負責展現出好看的介面
c --> ctrol模組,操作控制模組,負責處理控制部分

ORM:物件關係對映,包括資料建立過程,資料查詢過程,刪除,更新的過程。ORM操作資料庫模型
來間接的操作資料庫。

後期的所有資料庫操作都是通過ORM來操作的。

建立妹子圖專案模型

首先在資料庫中建立好資料庫,資料庫名字為meizi,字符集為utf8mb4 – UTF-8 Unicode,排序規則為utf8mb4_general_ci

還是使用之前的妹子圖的小專案,先建立目錄data,然後新建creata_database.py,準備建立資料庫結構,需要的資料結構大致如下

class data():
    id = None
    # id號
    title = ''
    # 頁面標題
    url = ''
    # 該頁面的主網址
    show_img = ''
    # 頁面的單張展示圖片
    all_img = ''
    # 頁面的所有圖片


    def sample(self):
        pass

然後使用sqlalchemy把結構直接對映到資料庫,非常方便。這裡提起一下,sqlalchemy不是flask自帶的,但是falsk對sqlalchemy做了部分的優化,使用pipenv install flask-sqlalchemy即可安裝。

ok,下面的新建的資料庫模型

# -*- coding: utf-8 -*-
# @Time    : 2018/7/24 0024 13:40
# @Author  : Langzi
# @Blog    : www.langzi.fun
# @File    : creata_database.py
# @Software: PyCharm
import sys
from sqlalchemy import Column,Integer,String
# 匯入column(欄位),Integer(數字型別)
reload(sys)
sys.setdefaultencoding('utf-8')

class data():
    id = Column(Integer,primary_key=True,autoincrement=True)
    # 設定id號為資料庫的主鍵,並且自增長
    # 相當於SQL:id int primary key auto_increment
    title = Column(String(100),nullable=True,default='獲取該妹子資訊失敗')
    # 頁面標題長度為100,並且允許為空,如果為空的話就生成上面的default
    url = Column(String(100),nullable=False,unique=True)
    # 該頁面的主網址長度100,不允許為空,不允許重複
    show_img = Column(String(100),nullable=False)
    # 頁面的單張展示圖片
    all_img = Column(String(100),nullable=False)
    # 頁面的所有圖片


    def sample(self):
        pass

妹子圖專案對映到資料庫

然後例項化sql的物件,新增程式碼:

from flask_sqlalchemy import SQLAlchemy
# 例項化sqlalchemy物件,在flask中匯入進來
db = SQLAlchemy()
# db就是sqlalchemy的初始化的核心物件
class data(db.Model):
	id= xxx重複上面的程式碼

把之前的類繼承db即可。然後回到主目錄下的init.py檔案下,該檔案之前是把藍圖註冊到app裡面的,之前的init.py程式碼如下

# -*- coding: utf-8 -*-
# @Time    : 2018/7/19 0019 18:36
# @Author  : Langzi
# @Blog    : www.langzi.fun
# @File    : __init__.py.py
# @Software: PyCharm
import sys
from flask import Flask
from app.web.data.creata_database import db
reload(sys)
sys.setdefaultencoding('utf-8')

def create_app():
    app = Flask(__name__,template_folder=('web/templates'))
    app.config.from_object('config')
    start_Blueprint(app)
    return app

def start_Blueprint(app):
    from app.web.Mmzi import web
    app.register_blueprint(web)

匯入data目錄下create_database.py中的db物件,然後註冊到app當中並且初始化物件,並且呼叫他。

# -*- coding: utf-8 -*-
# @Time    : 2018/7/19 0019 18:36
# @Author  : Langzi
# @Blog    : www.langzi.fun
# @File    : __init__.py.py
# @Software: PyCharm
import sys
from flask import Flask
#from app.web.data.creata_database import db
reload(sys)
sys.setdefaultencoding('utf-8')

def create_app():
    app = Flask(__name__,template_folder=('web/templates'))
    app.config.from_object('config')
    start_Blueprint(app)
    db.init_app(app)
    with app.app_context():
       db.create_all()
    return app

def start_Blueprint(app):
    from app.web import web
    app.register_blueprint(web)

app就像一個插板一樣,藍圖可以註冊到app裡面,路由註冊到app裡面,甚至資料庫也可以註冊到app裡面,後期的登入等模組一樣註冊到裡面,當前已經差不多配置完成了,還有重要的一點沒說,那就是連結到哪個資料庫裡面。

在主目錄下的config.py中可以新增資料庫的配置資訊,之前config之定義了DEBUG的開關,這個時候可以加入資料庫配置。

SQLAlchemy本身無法操作資料庫,其必須以來pymsql,cymysql,mysqldb等第三方外掛,根據配置檔案的不同調用不同的資料庫API,從而實現對資料庫的操作,下面使用過cymysql進行操作

app主目錄下的config.py配置檔案

# -*- coding: utf-8 -*-
# @Time    : 2018/7/17 0017 20:42
# @Author  : Langzi
# @Blog    : www.langzi.fun
# @File    : config.py
# @Software: PyCharm
import sys

reload(sys)
sys.setdefaultencoding('utf-8')

DEBUG = True

SQLALCHEMY_DATABASE_URI = 'mysql+cymysql://root:[email protected]:3306/meizi'
# SQLALCHEMY_DATABASE_URI是flask定義好的配置項,就像DEBUG一樣
# mysql + cymysql : 使用mysql資料庫,驅動使用cymysql(需要pipenv install cymysql),你還可以使用pymysql
# 然後資料庫賬號密碼,主機和埠以及資料庫名字

最後允許主程式的時候,會發現資料庫中多了一個名為meizi的資料庫,其中多了一張名為data的表,資料庫的結構和定義的結構一致。

不同連線資料庫外掛使用方法

MySQL-Python
    mysql+mysqldb://<user>:<password>@<host>[:<port>]/<dbname>

pymysql
    mysql+pymysql://<username>:<password>@<host>/<dbname>[?<options>]

MySQL-Connector
    mysql+mysqlconnector://<user>:<password>@<host>[:<port>]/<dbname>

cx_Oracle
    oracle+cx_oracle://user:[email protected]:port/dbname[?key=value&key=value...]

方法一:使用Pymysql與SQLAlchemy操作資料庫

# coding=utf-8

from sqlalchemy import create_engine

engine = create_engine("mysql+pymysql://root:[email protected]:3306/school?charset=utf8", max_overflow=5)

# 執行SQL
cur = engine.execute(
    "insert into user (name, password) values('lihy', 'lihy')"
    )

# 新插入行自增ID
cur.lastrowid

# 執行SQL
cur = engine.execute(
    "insert into user(name, password) values(%s, %s)", [('liq', 'liq'), ('liuxj', 'liuxj235')]
    )

# 執行SQL
cur = engine.execute(
    "insert into user(name, password) values(%(name)s, %(password)s)", name='lium', password='lium123'
    )

# 執行SQL
cur = engine.execute('select * from user')

# 獲取第一行資料, 第n行,所有資料
cur.fetchone()
cur.fetchmany(3)
cur.fetchall()

方法二:使用SQLALchemy操作資料庫

初始化物件

# -*-coding:utf-8-*-
from flask import Flask
from flask_sqlalchemy import SQLAlchemy
import datetime

app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql+pymysql://root:[email protected]:3306/movie'
# 用於連線資料的資料庫
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = True
# 如果設定成 True (預設情況),Flask-SQLAlchemy 將會追蹤物件的修改並且傳送訊號。

db = SQLAlchemy(app)
# 例項化db物件

建立資料庫模型

class User(db.Model):
    __tablename__ = 'user'
    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(35), unique=True)
    pwd = db.Column(db.String(20))
    phone = db.Column(db.String(11), unique=True)

    def __repr__(self):
    # repr返回一個物件的 string 格式,repr的用法是:比如a='admin',repr(a)>>>“‘admin’”
    return '<User %r>'%self.name

資料庫外來鍵關聯

關係使用 relationship() 函式表示。然而外來鍵必須用類 sqlalchemy.schema.ForeignKey 來單獨宣告:

class Person(db.Model):
    __tablename__ = 'persion'
    id = db.Column(db.Integer,primary_key=True,autoincrement=True)
    name = db.Column(db.String(100),index=True)
    pwd = db.Column(db.String(100),index=True)
    info = db.relationship('Address',backref = 'ss')


class Address(db.Model):
    __tablename__ = 'address'
    id = db.Column(db.Integer, primary_key=True)
    email = db.Column(db.String(50))
    persion_id = db.Column(db.Integer, db.ForeignKey('persion.id'))

上面的例子中,address表中的person_id關聯物件為person表的id的值。隨後在person表中設定關聯屬性,關聯屬性名為info,第一個引數指向Address模型,另一個名叫backref的引數,叫做反向關係,我們將其設定成backref=ss。設定好了後它會向Persion模型中新增一個名為info的屬性,這個屬性可以代替persion_id去直接訪問Persion模型的物件。

>>>r=persion(id=1,name='admin')
>>>u=User(id=10,name='Hyman',persion_id=1)
>>>r.info.append(u)
>>>print u.role
	<Persion admin>

我們將u新增到r的info中,這樣我們同時也在u中添加了一個名叫做persion的屬性,而這屬性就是我們定義的r物件.這就是所謂的可以用info代替persion_id訪問Role模型,但是它獲取的是Persion模型物件而非器對應的id的值…

如果使用MYSQL語句建立資料庫然後使用外來鍵關聯的話,這麼寫:

使用者表
create table user(
id int primary key autoincrement,
username varchar(100) not null
)

文章表
create table article(
id int primary key autoincrement,
title varchar(100) not null,
content text,
authot_id int, //這個是關聯使用者表的id字典,要記住一個表的外來鍵一定是另一個表的主鍵
foreign ket 'author_id' references 'user.id'
)

就這個例子如果使用SQLALchemy的話,建立模型這麼寫

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)
    author_id = db.Column(db.Integer,db.ForeignKey('user.id'))# 引用user表的id欄位

執行建立資料庫

db.create_all()

增刪改查

向資料庫插入資料分為三個步驟:

  • 建立 Python 物件
  • 把它新增到會話
  • 提交會話

from 你的資料庫模型檔案 import 你建立的資料庫中的表名
me =  你建立的資料庫中的表名('admin','18')
db.session.add(me)
db.session.commit()

db.session.delete(me)
db.session.commit()

假設資料庫中有如下條目,並且下面條目的表名為User:

id    username    email
1    admin    [email protected]
2    peter    [email protected]
3    guest    [email protected]

獲取所有資料:

res = User.query(username).all()

獲取返回資料的第一行:

res = User.query(username).first()

過濾資料:

res = User.query(username).filter(id>1).all()

limit:

res = User.query(username).all()[1:3]

and or:

from sqlalchemy import and_
User.query.filter(and_(id==1, username=='admin')).all()
User.query.filter(id==1, username=='admin').all()
User.query.filter(id==1).filter(username=='admin').all()
from sqlalchemy import or_
User.query.filter(or_(id==1, id==2)).all()

多條件查詢:

res = User.query(username).filter(id>0).filter(id<7).all()

通過使用者名稱查詢使用者:

peter = User.query.filter_by(username='peter').first()
peter.id
>>> 1
peter.email
>>>  [email protected]

如果查詢一個不存在的使用者名稱返回 None

使用更復雜的表示式查詢一些使用者:

User.query.filter(User.email.endswith('@example.com')).all()
>>> [<User u'admin'>, <User u'guest'>]

返回物件是列表

按某種規則對使用者排序:

User.query.order_by(User.username)
>>> [<User u'admin'>, <User u'guest'>, <User u'peter'>]

限制返回使用者的數量:

User.query.limit(1).all()
>>> [<User u'admin'>]

filter_byfilter都是過濾條件,只是用法有區別filter_by裡面不能用!=還有> < 等等,所有filter用得更多,filter_by只能用=

res = User.query.filter(User.username='admin').first()
res.username='root'
db.sission.commit()

例項演示一

#coding:utf-8
from flask_sqlalchemy import SQLAlchemy
from flask import Flask,render_template
app = Flask(__name__,template_folder='')
app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql+pymysql://root:[email protected]:3306/test404?charset=utf8'
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = True
db = SQLAlchemy(app)


class Article(db.Model):
    __tablename__ = 'article'
    id = db.Column(db.Integer,primary_key=True,autoincrement=True)
    title = db.Column(db.String(50),index=True)
    content = db.Column(db.Text)

db.create_all()

@app.route('/')
def index():
    # # 新增資料
    # # insert article(title,content) values('妹子大粑粑','AAbbCCaaaeeA啊啊')
    # ti = Article(title = '妹子大粑粑',content='AAbbCCaaaeeA啊啊')
    # db.session.add(ti)
    # db.session.commit()

    # # 查詢資料
    # # select * from article where title='妹子大粑粑'
    # result = Article.query.filter(Article.title=='妹子大粑粑').first().content
    # # 第一條的內容
    # res1 = Article.query.filter(Article.title=='妹子大粑粑').all()[0].content
    # # 第一條的內容
    # return render_template('index.html',x=res1)

    # # 修改資料
    # # 先查詢到要修改的資料,然後對需要修改的地方修改,然後提交
    # result = Article.query.filter(Article.title == '妹子大粑粑').first()
    # result.content = '啊啊啊啊啊啊啊啊啊去啊啊啊啊啊啊啊土撥鼠啊'
    # db.session.commit()

    # # 刪除資料
    # # 同上
    # result = Article.query.filter(Article.title == '妹子大粑粑').first()
    # db.session.delete(result)
    # db.session.commit()

app.run(debug=True)

例項演示二

建立一個數據庫物件

class Person(Base):
    __tablename__ = 'person'

    id   = Column(Integer, primary_key=True)
    name = Column(String(32))

    def __repr__(self):
        return "<Person(name='%s')>" % self.name

新增資料

建立一個person物件
person = Person(name='jack')
新增person物件,但是仍然沒有commit到資料庫
session.add(person)
commit操作
session.commit()

如何獲取id的?

>>> person = Person(name='ilis')
>>> person.id #此時還沒有commit到mysql,因此無id
>>> session.add(person)
>>> person.id #同上
>>> session.commit()
2015-08-18 23:08:23,530 INFO sqlalchemy.engine.base.Engine INSERT INTO person (name) VALUES (%s)
2015-08-18 23:08:23,531 INFO sqlalchemy.engine.base.Engine ('ilis',)
2015-08-18 23:08:23,532 INFO sqlalchemy.engine.base.Engine COMMIT
>>> person.id #commit後,可以獲取該物件的id
2015-08-18 23:08:27,556 INFO sqlalchemy.engine.base.Engine BEGIN (implicit)
2015-08-18 23:08:27,557 INFO sqlalchemy.engine.base.Engine SELECT person.id AS person_id, person.name AS person_name
FROM person
WHERE person.id = %s
2015-08-18 23:08:27,557 INFO sqlalchemy.engine.base.Engine (5L,)
5L
>>>

新增多個數據

session.add_all([
    Person(name='jack'),
    Person(name='mike')
])
session.commit()

回滾

>>> person = Person(name='test')
>>> session.add(person)
>>> session.query(person).filter(name=='test')
>>> session.query(Person).filter(Person.name=='test').all()
2015-08-18 23:13:23,265 INFO sqlalchemy.engine.base.Engine INSERT INTO person (name) VALUES (%s)
2015-08-18 23:13:23,265 INFO sqlalchemy.engine.base.Engine ('test',)
2015-08-18 23:13:23,267 INFO sqlalchemy.engine.base.Engine SELECT person.id AS person_id, person.name AS person_name
FROM person
WHERE person.name = %s
2015-08-18 23:13:23,267 INFO sqlalchemy.engine.base.Engine ('test',)
[<demo.Person object at 0x7f4e37730510>]
>>> session.rollback()
2015-08-18 23:13:37,496 INFO sqlalchemy.engine.base.Engine ROLLBACK
>>> session.query(Person).filter(Person.name=='test').all()
2015-08-18 23:13:38,690 INFO sqlalchemy.engine.base.Engine BEGIN (implicit)
2015-08-18 23:13:38,691 INFO sqlalchemy.engine.base.Engine SELECT person.id AS person_id, person.name AS person_name
FROM person
WHERE person.name = %s
2015-08-18 23:13:38,692 INFO sqlalchemy.engine.base.Engine ('test',)
[]
>>>

資料查詢

使用Session的query()方法。

獲取所有資料
session.query(Person).all()
獲取某一列資料,類似於django的get,如果返回資料為多個則報錯

session.query(Person).filter(Person.name==‘jack’).one()

獲取返回資料的第一行
session.query(Person).first()
過濾資料
session.query(Person.name).filter(Person.id>1).all()
limit
session.query(Person).all()[1:3]
order by
session.query(Person).ordre_by(-Person.id)
equal/like/in
query = session.query(Person)
query.filter(Person.id==1).all()
query.filter(Person.id!=1).all()
query.filter(Person.name.like('%ac%')).all()
query.filter(Person.id.in_([1,2,3])).all()
query.filter(~Person.id.in_([1,2,3])).all()
query.filter(Person.name==None).all()
and or
from sqlalchemy import and_
query.filter(and_(Person.id==1, Person.name=='jack')).all()
query.filter(Person.id==1, Person.name=='jack').all()
query.filter(Person.id==1).filter(Person.name=='jack').all()
from sqlalchemy import or_
query.filter(or_(Person.id==1, Person.id==2)).all()
使用text
from sqlalchemy import text
query.filter(text("id>1")).all()
query.filter(Person.id>1).all() #同上
query.filter(text("id>:id")).params(id=1).all() #使用:,params來傳參

query.from_statement(
    text("select * from person where name=:name")).\
    params(name='jack').all()
計數

Query使用count()函式來實現查詢計數。

query.filter(Person.id>1).count()
group by的用法
from sqlalchemy import func
session.query(func.count(Person.name), Person.name),group_by(Person.name).all()
實現count(*)來查詢表內行數
session.query(func.count('*')).select_from(Person).scalar()
session.query(func.count(Person.id)).scalar()

Pymysql with 操作

import contextlib
@contextlib.contextmanager
def mysql(host='127.0.0.1',user='root',passwd='root',db='meizi',port=3306,charset='utf8'):
    conn = pymysql.connect(host='127.0.0.1',user='root',passwd='root',db='meizi',port=3306,charset='utf8')
    cursor = conn.cursor()
    try:
        yield cursor
    finally:
        conn.commit()
        cursor.close()
        conn.close()

# # 執行sql
# with mysql() as cursor:
#    print(cursor)
#    row_count = cursor.execute("select * from tb7")
#    row_1 = cursor.fetchone()
#    print row_count, row_1

官方文件

參考連結

參考連結

相關推薦

Flask SQLAlchemy 資料庫筆記

title: Flask SQLAlchemy 資料庫 copyright: true top: 0 date: 2018-07-24 13:27:03 tags: [Flask 資料庫,sqlalchemy,資料庫對映] categories: Flask

Flask-SQLAlchemy資料庫操作

建表 # -*- coding: UTF-8 -*- from . import db #多對多關係表,兩組一對多,即為多對多 class Boy2Girl(db.Model): __tablename__ = 'boy2girl' nid = db.Column(db.Intege

FLASK SQLAlchemy資料庫URI

在開始抽象資料以前,我們需要先設定flask sqlalchemy.sqlalchemy通過一個特殊的資料庫uri連建立資料進行連

三十四、python學之Flask框架(六)資料庫:mysql資料庫Flask-SQLAlchemy

一、資料庫知識回顧: 1.SQL:關係型資料庫,支援結構化查詢語言: 關係型資料庫:以表的形式儲存; 支援結構化查詢語言:SQL語句; 列數固定;行數可變,定義資料,主鍵、外來鍵,引用同表或不同表的主鍵,這種聯絡稱為關係. 2.關於正規化: 第一

flask框架學習筆記——SQLAlchemy外來鍵約束

from flask import Flask import config from flask_sqlalchemy import SQLAlchemy app = Flask (name) app.config.from_object(config) db=SQLAlchemy(ap

Python Flask資料庫SQLAlchemy,關聯查詢(多表查詢),一對多關聯

  demo.py(定義模型類,一對多關聯): # coding:utf-8 from flask import Flask from flask_sqlalchemy import SQLAlchemy # 匯入 app = Flask(__name__) # 通過類物

Python Flask資料庫SQLAlchemy資料庫查詢

資料庫的增、刪、改通過 db.session 的會話物件,資料庫的查詢一般通過 模型類名.query() (也可以通過session會話查詢)   demo.py(資料庫查詢): import User # 匯入模型類 # 通過query查詢 # 查詢所有。 (U

Python Flask資料庫SQLAlchemy,模型類的定義,資料庫新增

  SQLAlchemy是一個ORM框架。flask-sqlalchemy是一個簡化了SQLAlchemy操作的flask擴充套件。 安裝flask-sqlalchemy: pip install flask-sqlalchemy 安裝Mysql驅動: &n

Python Flask資料庫SQLAlchemy資料庫遷移 (根據模型類自動生成資料庫表),Flask-Migrate

在開發過程中,需要修改資料庫模型類,而且還要在修改之後更新資料庫。最直接的方式就是刪除舊錶,但這樣會丟失資料。 更好的解決辦法是使用資料庫遷移框架,它可以追蹤資料庫模型的變化,然後把變動應用到資料庫中。 在Flask中可以使用Flask-Migrate擴充套件,來實現資料庫遷移。並且整合到F

Python Flask資料庫SQLAlchemy資料庫的修改、刪除

  demo.py(資料庫的修改、刪除): from flask import Flask, current_app from flask_sqlalchemy import SQLAlchemy # 匯入 from demo1 import User # 匯入模型類 #

python Flask-SQLAlchemy 連線資料庫

需要安裝flask pip install flask 安裝Mysql-Python (這個是py的mysql驅動,這個在官方沒有win的支援,只有第三方才有py2.7的whl) pip instal

Flask零基礎到專案實戰(四)SQLAlchemy資料庫(一)

文章來源—知了課堂的課件 一、SQLAlchemy簡介 flask_sqlalchemy是一套ORM框架。 ORM(Object Relationship Mapping):模型關係對映 ORM的好處:可以讓我們操作資料庫跟操作類的物件一樣。一個表可

在python中使用flask-sqlalchemy資料庫進行連線操作

這裡使用的資料庫是mysql。 python和mysql是不沾邊的兩個東西,不能直接進行互通交流,想要這兩者之間能進行交流,就需要一箇中間件或者說驅動程式。 python2: 在window上 python2 連線mysql可以到網上下個驅動 MySQL_

Flask-Sqlalchemy設置時間默認值

flask時間類型import datetime t = Table("mytable", meta, Column(‘id‘, Integer, primary_key=True), # define ‘last_updated‘ to be populated with datetime.n

Flask-sqlalchemy 語法總結

func 刪除表 mode 過濾 span group fun flask time Flask-sqlalchemy 語法總結 ** DDLdb.create_all() :創建實體表db.drop_all(): 刪除表 1)插入表Db.session.add(user)

flask-sqlalchemy基本操作數據庫

flow class ini html tex char eat light pos # -*- coding: utf-8 -*- from sqlalchemy.ext.declarative import declarative_base from sqlalche

flask-sqlalchemy

args tween users connector ast als aps tail 分組 一. 介紹 SQLAlchemy是一個基於Python實現的ORM框架。該框架建立在 DB API之上,使用關系對象映射進行數據庫操作,簡言之便是:將類和對象轉換

flask SQLAlchemy

cat world 文件 true fig 數據 __name__ run python 介紹 SQLAlchemy是Python編程語言下的一款ORM框架,該框架建立在數據庫API之上,使用關系對象映射進行數據庫操作,簡言之便是:將對象轉換成SQL,然後使用數據API執

flask SQLALchemy外鍵及約束

== 文章 設定 反向引用 null 關聯 conf rsquo all from flask import Flask,session from flask_sqlalchemy import SQLAlchemy import config app = F

Flask報錯筆記:ImportError: No module named ‘MySQLdb‘

flask web 環境描述:Windows10 自己部署一個flask項目 #/usr/bin/python env #coding:utf8 from flask_script import Manager from flask_bootstrap import Bootstrap from fl