flask数据库可视化SQLite

         Flask-SQLAlchemy 是一个 Flask 扩展,简化了在 Flask 程序中使用 SQLAlchemy 的操作。SQLAlchemy 是一个很强大的关系型数据库框架, 支持多种数据库后台。 SQLAlchemy 提供了高层 ORM,也提供了使用数据库原生 SQL 的低层功能。

         和其他大多数扩展一样, Flask-SQLAlchemy 也使用 pip 安装:


(venv) $ pip install flask-sqlalchemy

        在 Flask-SQLAlchemy 中,数据库使用 URL 指定。最流行的数据库引擎采用的数据库 URL格式如下表所示。


FLask-SQLAlchemy数据库URL

flask数据库可视化SQLite_第1张图片

        在这些 URL 中, hostname 表示 MySQL 服务所在的主机,可以是本地主机( localhost),也可以是远程服务器。 数据库服务器上可以托管多个数据库,因此 database 表示要使用的数据库名。如果数据库需要进行认证, username 和 password 表示数据库用户密令。

        SQLite 数据库不需要使用服务器,因此不用指定 hostname、 username 和password。 URL 中的 database 是硬盘上文件的文件名。

       程序使用的数据库 URL 必须保存到 Flask 配置对象的 SQLALCHEMY_DATABASE_URI 键中。配置对象中还有一个很有用的选项, 即 SQLALCHEMY_COMMIT_ON_TEARDOWN 键,将其设为 True时,每次请求结束后都会自动提交数据库中的变动。其他配置选项的作用请参阅 FlaskSQLAlchemy 的文档。如下展示了如何初始化及配置一个简单的 SQLite 数据库。
 hello.py: 配置数据库

from flask.ext.sqlalchemy import SQLAlchemy

basedir = os.path.abspath(os.path.dirname(__file__))

app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] ='sqlite:///' + os.path.join(basedir, 'data.sqlite')
app.config['SQLALCHEMY_COMMIT_ON_TEARDOWN'] = True
db = SQLAlchemy(app)

db 对象是 SQLAlchemy 类的实例,表示程序使用的数据库,同时还获得了 Flask-SQLAlchemy提供的所有功能。

如下为我使用SQLite的配置:

class DevelopmentConfig(Config):
    DEBUG = True
    SQLALCHEMY_DATABASE_URI = os.environ.get('DEV_DATABASE_URL') or \
        'sqlite:///' + os.path.join(basedir, 'data-dev.sqlite')


class TestingConfig(Config):
    TESTING = True
    SQLALCHEMY_DATABASE_URI = os.environ.get('TEST_DATABASE_URL') or \
        'sqlite:///' + os.path.join(basedir, 'data-test.sqlite')
    WTF_CSRF_ENABLED = False


class ProductionConfig(Config):
    SQLALCHEMY_DATABASE_URI = os.environ.get('DATABASE_URL') or \
        'sqlite:///' + os.path.join(basedir, 'data.sqlite')

在3个子类中,SQLALCHEMY_DATABASE_URI变量都被制订了不同的值。这样程序就可以在不同的配置环境中运行,每个环境使用不同的数据库。

定义模型
        模型
这个术语表示程序使用的持久化实体。 在 ORM 中,模型一般是一个 Python 类,类中的属性对应数据库表中的列。Flask-SQLAlchemy 创建的数据库实例为模型提供了一个基类以及一系列辅助类和辅助函数,可用于定义模型的结构。

roles 表和 users 表的关系如下:

flask数据库可视化SQLite_第2张图片


定义 Role 和 User 模型

class Role(db.Model):
  __tablename__ = 'roles'
 id = db.Column(db.Integer, primary_key=True)
 name = db.Column(db.String(64), unique=True)

 def __repr__(self):
    return '' % 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)

 def __repr__(self):
     return '' % self.username

       类变量 __tablename__ 定义在数据库中使用的表名。如果没有定义 __tablename__, Flask-SQLAlchemy 会使用一个默认名字,但默认的表名没有遵守使用复数形式进行命名的约定,所以最好由我们自己来指定表名。

      虽然没有强制要求,但这两个模型都定义了 __repr()__ 方法,返回一个具有可读性的字符串表示模型,可在调试和测试时使用。

      其余的类变量都是该模型的属性,被定义为 db.Column类的实例。
db.Column 类构造函数的第一个参数是数据库列和模型属性的类型。下表列出了一些可用的列类型以及在模型中使用的 Python 类型。

最常用的SQLAlchemy列类型

flask数据库可视化SQLite_第3张图片


db.Column 中其余的参数指定属性的配置选项。下表列出了一些最常使用的SQLAlchemy列选项

flask数据库可视化SQLite_第4张图片

Flask-SQLAlchemy 要求每个模型都要定义主键,这一列经常命名为 id。


创建表

我们要让 Flask-SQLAlchemy 根据模型类创建数据库。方法是使用 db.create_all()函数:


(venv) $ python hello.py shell
>>> from hello import db
>>> db.create_all()


但是在命令行下操作数据库非常不方便,因为看不到数据库里面的数据到底是什么样的,尤其在删除的时候,会因为找不到对象的名字而操作失败或者误删。所以介绍一个非常好用的可视化SQLite数据库,可以在此可视化数据库上执行烦人的查找删除,非常方便。

从下面的链接可以获取SQLite可视化的数据库安装文件

http://download.csdn.net/detail/ying847782627/9499662


安装后不需要进行任何配置,直接打开创建的数据库文件,如data.sqlite文件,即可在此数据库上执行各种操作。






你可能感兴趣的:(Python)