flask_十、sqlite相关

sqlite相关

一、ORMobject 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过滤

 

 

 

 

 

 

 

 

 

posted @ 2022-04-28 00:39  翻滚的小强  阅读(85)  评论(0)    收藏  举报