flask_十、sqlite相关
sqlite相关
一、ORM(object relational mapping)对象关系映射
说明:映射的是python和数据库的对象
1)表——>python 类
2)字段(列)——>类属性
3)记录(行)——>类实例
1.1建表语句:
CREATE TABLE contacts( name varchar(100) NOT NULL, phone_number varchar(32), );
若要创建表
则:定义类的时候,类名即为表名
1.2创建表的示例(定义类):
from foo_orm import Model,Column,String class Contact(Model): __tablename__ ='contacts' #属性,建一个表名 name = Column(string(100),nullable=False) phone_number = Column(String(32))
1.3表中写入数据(sql)
数据库中写入示例 INSERT INTO contacts(name,phone_number) VALUES('renyc','12345678901');
1.4对象的写入
contact = Contact(name='renyc',phone_number='12345678901')
二、Flask-SQLAlchemy管理数据库(数据准备)
Flask在它的基础上做了些集成
2.1需要装下包
>pipenv install flask-sqlalchemy
再下载sqlite3

2.2解压到同一目录下
将该路径加到环境变量下
D:\sqlite3

2.3再次在官网下载SQLiteSpy解压缩包

2.4准备表数据
CREATE TABLE note( ID INT PRIMARY KEY NOT NULL, NAME TEXT NOT NULL) INSERT INTO note (ID,NAME) VALUES (1, 'name001'); INSERT INTO note (ID,NAME) VALUES (2, 'name002');
三、Env文件下引用如下内容

3.1引用如下语句
import os app.config['SQLALCHEMY_DATABASE_URI'] = os.getenv('DATABASE_URL', 'sqlite:///' + os.path.join(app.root_path,'World.db'))
3.2、更新app.py文件
# encoding=utf-8 from flask import Flask from flask_sqlalchemy import SQLAlchemy import os import click app = Flask(__name__) app.secret_key = os.getenv('SECRET_KEY','secret string') app.config['SQLALCHEMY_DATABASE_URI'] = os.getenv('DATABASE_URL','sqlite:///' + os.path.join(app.root_path,'data.db')) app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False db = SQLAlchemy(app) #定义Note模型类,映射到表note class Note(db.Model): ID = db.Column(db.Integer,primary_key = True) NAME = db.Column(db.Text) def __repr__(self): # %r 是用repr()方法处理对象,返回类型本身,而不进行类型转化 return '<Note ID: %r NAME:%r>' % (self.ID,self.NAME) @app.cli.command() def initdb(): db.create_all() click.echo('Initialized database') if __name__ == "__main__": app.run(debug=True)
3.3常用的DBMS以及数据库URI格式实例

3.4flask shell启动加载之后,可打印root_path
app.root_path


3.5引用数据库之后的效果
>>> from app import db >>> db <SQLAlchemy engine=sqlite:///E:\FlaskTest\data.db>
3.6参数说明


3.7定义外键、索引的一些说明(如下:)

四、查看库表数据
查看所有数据(需引用到表) >>> from app import Note >>> Note <class 'app.Note'> >>> >>> Note.query.all() [<Note ID: 1 NAME:'name001'>, <Note ID: 2 NAME:'name002'>]
五、实例化数据,insert数据,删除数据
>>> from app import db >>> db <SQLAlchemy engine=sqlite:///E:\FlaskTest\data.db> >>> from app import Note >>> Note.query.all() [<Note ID: 1 NAME:'name001'>, <Note ID: 2 NAME:'name002'>] >>> note1 = Note(ID=3,NAME="addname003") >>> >>> >>> db.session.add(note1) >>> db.session.commit() >>>
六、清除数据、重建数据表
db.drop_all() >>> db.create_all() >>>
重新create之后,表会恢复回来到sqlite,但数据已经没了
七、app.py文件中的__repr__方法的作用
def __repr__(self): # %r 是用repr()方法处理对象,返回类型本身,而不进行类型转化 return '<Note ID: %r NAME:%r>' % (self.ID,self.NAME)

八、app.py文件的调试
>>> from flask import Flask >>> from flask_sqlalchemy import SQLAlchemy >>> import os >>> import click >>> from app import app >>> >>> app.config['SQLALCHEMY_DATABASE_URI'] = os.getenv('DATABASE_URL','sqlite:///' + os.path.j oin(app.root_path,'data.db')) >>> app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False >>> db = SQLAlchemy(app) >>> db <SQLAlchemy engine=sqlite:///E:\FlaskTest\data.db> >>> from app import Note >>> Note.query.all() [<Note ID: 1 NAME:'name001'>, <Note ID: 2 NAME:'name002'>, <Note ID: 3 NAME:'name003'>] >>>
九、其他参数


进入python环境


from app import Note >>> Note.query.all() [<Note ID: 1 NAME:'name001'>, <Note ID: 2 NAME:'name002'>, <Note ID: 3 NAME:'name003'>] >>> Note.query.first() <Note ID: 1 NAME:'name001'>
十、filter过滤






浙公网安备 33010602011771号