flask之flask_sqlalchemy安裝


網址:http://docs.jinkan.org/docs/flask-sqlalchemy/

1.安裝:pip install flask-sqlalchemy 或者 pip install -i https://pypi.tuna.tsinghua.edu.cn/simple flask-sqlalchemy

2.如果連接的是 mysql 數據庫,需要安裝 mysqldb:pip install flask-mysqldb 或者pip install -i https://pypi.tuna.tsinghua.edu.cn/simple flask-mysqldb

3.建模:

mydb.py

from flask_sqlalchemy import SQLAlchemy  #導入SQLAlchemy
from app import app #導入app
import os

basedir = os.path.abspath(os.path.dirname(__file__)) #當前文件的路徑

app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///'+os.path.join(basedir,'data.sqlite') #配置連接什么類型的數據庫

# 動態追蹤修改設置,如未設置只會提示警告
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = True
#查詢時會顯示原始SQL語句
app.config['SQLALCHEMY_ECHO'] = True

db =SQLAlchemy(app) #實例化數據庫實例


#建表
class Role(db.Model):
__tablename__ = 'roles' #表名
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String(64), unique=True)
users = db.relationship('User',backref='role') #關系表,反向索引role ,創建一對多的一的那端

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


#建表
class User(db.Model):
__tablename__ = 'users' #表名

id = db.Column(db.Integer, primary_key=True)
username = db.Column(db.String(64), unique=True,index=True)
role_id = db.Column(db.Integer,db.ForeignKey('roles.id')) #一對多的多的那端, 外鍵,外鍵為表的id,即roles.id
email = db.Column(db.String(120), unique=True)

# def __init__(self, username, email):
# self.username = username
# self.email = email

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

db.create_all() #創建數據庫

 

4.配置說明:

名字	                                        備注
SQLALCHEMY_DATABASE_URI	                    用於連接的數據庫 URI 。例如:sqlite:////tmp/test.dbmysql://username:password@server/db
SQLALCHEMY_BINDS	                        一個映射 binds 到連接 URI 的字典。更多 binds 的信息見用 Binds 操作多個數據庫。
SQLALCHEMY_ECHO	                            如果設置為Ture, SQLAlchemy 會記錄所有 發給 stderr 的語句,這對調試有用。(打印sql語句)
SQLALCHEMY_RECORD_QUERIES	                可以用於顯式地禁用或啟用查詢記錄。查詢記錄 在調試或測試模式自動啟用。更多信息見get_debug_queries()。
SQLALCHEMY_NATIVE_UNICODE	                可以用於顯式禁用原生 unicode 支持。當使用 不合適的指定無編碼的數據庫默認值時,這對於 一些數據庫適配器是必須的(比如 Ubuntu 上 某些版本的 PostgreSQL )。
SQLALCHEMY_POOL_SIZE	                    數據庫連接池的大小。默認是引擎默認值(通常 是 5 )
SQLALCHEMY_POOL_TIMEOUT	                    設定連接池的連接超時時間。默認是 10 。
SQLALCHEMY_POOL_RECYCLE	                    多少秒后自動回收連接。這對 MySQL 是必要的, 它默認移除閑置多於 8 小時的連接。注意如果 使用了 MySQL , Flask-SQLALchemy 自動設定 這個值為 2 小時

  

5.常用的SQLAlchemy字段類型

類型名	           python中類型	            說明
Integer	           int	                    普通整數,一般是32位
SmallInteger	   int	                    取值范圍小的整數,一般是16位
BigInteger	   int或long	            不限制精度的整數
Float	           float	            浮點數
Numeric	           decimal.Decimal	    普通整數,一般是32位
String	           str	                    變長字符串
Text	           str	                    變長字符串,對較長或不限長度的字符串做了優化
Unicode	           unicode	            變長Unicode字符串
UnicodeText	   unicode	            變長Unicode字符串,對較長或不限長度的字符串做了優化
Boolean	           bool	                    布爾值
Date	           datetime.date	    時間
Time	           datetime.datetime	    日期和時間
LargeBinary	   str	                    二進制文件

 

6.常用的SQLAlchemy列選項

選項名	                              說明
primary_key	                      如果為True,代表表的主鍵
unique	                              如果為True,代表這列不允許出現重復的值
index	                              如果為True,為這列創建索引,提高查詢效率
nullable	                      如果為True,允許有空值,如果為False,不允許有空值
default	                              為這列定義默認值

  

7.常用的SQLAlchemy關系選項

選項名	                           說明
backref	                           在關系的另一模型中添加反向引用
primary join	                   明確指定兩個模型之間使用的聯結條件
uselist	                           如果為False,不使用列表,而使用標量值
order_by	                   指定關系中記錄的排序方式
secondary	                   指定多對多關系中關系表的名字
secondary join	                   在SQLAlchemy中無法自行決定時,指定多對多關系中的二級聯結條件

  

8.連接不同類型的數據庫

數據庫引擎                                           URL
Postgres                                           postgresql://scott:tiger@localhost/mydatabase
MySQL                                              mysql://scott:tiger@localhost/mydatabase
Oracle                                             oracle://scott:tiger@127.0.0.1:1521/sidname
SQLite (注意開頭的四個斜線)                          sqlite:////absolute/path/to/foo.db

  

9.

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM