我实际上在烧瓶中使用 sqlalchemy 而不使用声明性基础,我没有任何问题。如果您愿意,您可以随时这样做,没有义务使用对象关系映射器,ORM 只是 sqlalchemy 的一部分。您始终可以使用 alchemy sql 表达式语言,在模型对象中定义表,并在那里定义一些将使用表达式语言的方法。我有这样的代码(模型是我之前定义的对象),connect 是一个连接到 db 的装饰器,它对我来说很好用。
def connect(func):
eng = create_engine(app.config["DATABASE"])
@wraps(func)
def wrapped(*args,**kwargs):
with closing(eng.connect()) as con:
result = con.execute(func(*args,**kwargs))
return result
return wrapped
class User_(Model):
def __init__(self):
Model.__init__(self)
self.metadata = MetaData()
self.structure = Table("users", self.metadata,
Column("id",Integer,primary_key=True),
Column("username",VARCHAR(64)),
Column("password",TEXT),
Column("email",VARCHAR(100)),
Column("about_me",TEXT),
Column("deadline",DATETIME),
Column("points",INTEGER)),
Column("date_created",DATETIME))
@connect
def get_hashed_pass(self,username):
""" """
t = self.structure
s = select([t.c.password]).where(t.c.username == str(username))
return s
#other methods follow
Flask 关于炼金术的文档明确表示完全可以这样做:
如果您只想使用数据库系统(和 SQL)抽象层,您基本上只需要引擎
PS哦,还有一件事,他们在文档中说,如果您想快速入门,最好使用扩展程序,但我个人对此不太确定,如果您像我一样并且感觉更多熟悉 sql 查询而不是 ORM,您可能更容易快速上手而无需扩展。