from sqlalchemy import Column, String, create_engine from sqlalchemy.ext.declarative import declarative_base engine = create_engine('sqlite:///path',echo=True) # 建立数据库链接 Base = declarative_base() Base.metadata.reflect(engine) tables = Base.metadata.tables print(tables)
#获取数据库中的全部表 from flask import Flask from flask_sqlalchemy import SQLAlchemy import pymysql app = Flask(__name__) # 实例化一个Flask #链接数据库配置: SQLALCHEMY_DATABASE_URI。 app.config["SQLALCHEMY_DATABASE_URI"] = "mysql+pymysql://root:root@127.0.0.1:8889/movie" app.config["SQLALCHEMY_TRACK_MODIFICATIONS"] = True app.config["SECRET_KEY"] = "1e3df42bbfe146c785f422611d6e7429" app.debug = True db = SQLAlchemy(app) # 初始化数据库 db.reflect(app=app) #一、映射app数据库中的表(app其实就是本程序的flask实例,已链接到数据库) tables=db.metadata.tables #二、取得全部数据库(返回:immutabledict,里面实际包含了数据库中全部表的结构 print(tables)
上面无论哪一种模式,得到的tables都是一个immutabledict,格式以下:html
immutabledict({'users': Table('users', MetaData(bind=None), Column('id', INTEGER(), table=<users>, primary_key=True, nullable=False), Column('name', VARCHAR(), table=<users>), Column('fullname', VARCHAR(), table=<users>), Column('password', VARCHAR(), table=<users>), schema=None)})
好比:mysql
# tables 返回的结果,其中包含了:user、serlog、tag三个表 immutabledict({ 'user': Table('user', MetaData(bind=None), Column('id', Integer(), table=<user>, primary_key=True, nullable=False), Column('name', String(length=100), table=<user>), Column('pwd', String(length=100), table=<user>), Column('email', String(length=100), table=<user>), Column('phone', String(length=11), table=<user>), Column('info', Text(), table=<user>), Column('face', String(length=255), table=<user>), Column('addtime', DateTime(), table=<user>, default=ColumnDefault(datetime.datetime(2018, 10, 5, 18, 20, 9, 500177))), Column('uuid', String(length=255), table=<user>), schema=None), 'userlog': Table('userlog', MetaData(bind=None), Column('id', Integer(), table=<userlog>, primary_key=True, nullable=False), Column('user_id', Integer(), ForeignKey('user.id'), table=<userlog>), Column('ip', String(length=100), table=<userlog>), Column('addtime', DateTime(), table=<userlog>, default=ColumnDefault(datetime.datetime(2018, 10, 5, 18, 20, 9, 510654))), schema=None), 'tag': Table('tag', MetaData(bind=None), Column('id', Integer(), table=<tag>, primary_key=True, nullable=False), Column('name', String(length=100), table=<tag>), Column('addtime', DateTime(), table=<tag>, default=ColumnDefault(datetime.datetime(2018, 10, 5, 18, 20, 9, 510654))), schema=None) })
经测试这个immutabledict没有has_key()方法,可是能够用if ‘users’ in tables.keys()判断。以上获得的tables包括表名、字段名、字段类型、字符格式等,若是仅打印 engine.table_names()
时它列出的全部表名(仅仅只有表名)。web
若是要分离tables的数据,使用re 模块对字符串操做便可,如:sql
import re # 获取数据库中的全部表 db.reflect(app=app) #一、映射app数据库中的表(app其实就是本程序的flask实例,已链接到数据库) tables=db.metadata.tables #二、取得全部数据库(返回:immutabledict,里面实际包含了数据库中全部表的结构 print(tables) table_list = re.findall("\'.*?\'", str(tables)) #三、找到全部在两个小撇中间的字符(包括表名称和字段名称,其实应该找"两个小撇+:"的,才是表名称,但不会正则) print(table_list) table_list = [re.sub("'", '', each) for each in table_list] #替换掉双引号 print(table_list)
下面是百度找来的回答:
It aims to simplify using SQLAlchemy with Flask by providing useful
defaults and extra helpers that make it easier to accomplish common
tasks. (官网原文)
flask-sqlalchemy 在 sqlalchemy 的基础上,提供了一些经常使用的工具,并预设了一些默认值,帮助你更轻松地完成常见任务。
flask-sqlalchemy 用起来比直接用 sqlalchemy 方便、省事,不过有些高级一点的功能若是不了解 sqlalchemy 的话会用很差。
因此我的建议最好先直接用 sqlalchemy 工做一小段时间,感觉一下 sqlalchemy 究竟是怎样运行起来的。等有了必定了解后,若是以为有必要,再改用 flask-sqlalchemy,提升编程效率。数据库