Flask-SQLAlchemy 在 db.create_all()的时候创建的到底是什么?

2015-01-18 12:57:25 +08:00
 skyduy
就拿这个例子来说。
------------------------------------------------------------------------
from flask import Flask
from flask.ext.sqlalchemy import SQLAlchemy
app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:////tmp/test.db'
db = SQLAlchemy(app)

class User(db.Model):
id = db.Column(db.Integer, primary_key=True)
username = db.Column(db.String(80), unique=True)
def __init__(self, username, email):
self.username = username

db.create_all()

admin = User('admin')
db.session.add(admin)
db.session.commit()
------------------------------------------------------------------------
不清楚在create_all()的时候是在指定位置创建了一个空的文件test.db,还是同时定义好了结构。

如果是定义好了结构,说不通啊,在create_all()之前根本就没有提及任何结构啊,只配置了一下它的路径。

如果test.db是空文件的话,那不就可以自己手动创建,手动移植了?内容不也就可以随便添加了?那结构不就会很乱吗?尤其在一些大型应用中,利用上下文,各种结构直接往一个db里面存储,维护起来不是很难吗?

难道真的是即用即插?!
8714 次点击
所在节点    Python
4 条回复
9hills
2015-01-18 13:55:38 +08:00
create_all的时候是建表的。schema你不是定义了User类么?
jamiesun
2015-01-18 16:00:25 +08:00
只是表不会创建数据库
dagger
2015-01-18 21:45:18 +08:00
class User(db.Model),写这句的时候,会反作用到db,接下来db.create_all()的时候就会创建对应的表结构了,不信的话你可以把这两句掉个个儿试试
shajiquan
2015-01-19 18:27:15 +08:00
会创建使用 `db.Model` 类的所有数据库表 schema。

不过,不推荐使用 flask-sqlalchemy,推荐使用纯 sqlalchemy,随意调用,在其他任何地方都可以。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/163184

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX