Hiện tại, đây là thứ không được hỗ trợ tốt nhưng không thể làm được. Xem this issue trong danh sách vấn đề Flask-SQLAlchemy, trong đó thừa nhận rằng việc thực hiện các phần mở rộng hiện tại làm cho tình trạng này đau đầu hơn họ nghĩ. Hy vọng rằng điều này sẽ được hỗ trợ tốt hơn trong tương lai (một khi một con đường di trú vững chắc và API mới được xác định).
vấn đề đó cho mẫu mã sau đây:
from flask import Flask
from models import Base, User # Your non-Flask-SQLAlchemy models...
from flask_sqlalchemy import SQLAlchemy
app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:////tmp/test.db'
db = SQLAlchemy(app)
@app.before_first_request
def setup():
# Recreate database each time for demo
Base.metadata.drop_all(bind=db.engine)
Base.metadata.create_all(bind=db.engine)
db.session.add(User('Bob Jones', '[email protected]'))
db.session.add(User('Joe Quimby', '[email protected]'))
db.session.commit()
@app.route('/')
def root():
users = db.session.query(User).all()
return u"<br>".join([u"{0}: {1}".format(user.name, user.email) for user in users])
if __name__ == '__main__':
app.run('127.0.0.1', 5000)
Có một vài điều cần lưu ý ở đây:
Trước tiên, bạn mất khả năng làm User.query
(vì tài khoản được tạo bằng tường thuật riêng của mình cơ sở), cùng với tất cả những thứ khác mà Flask-SQLAlchemy's db.Model cung cấp cho bạn (chẳng hạn như khả năng tự động tạo tên bảng và các phương thức như first_or_404()
).
Thứ hai, bất cứ khi nào bạn cần làm những việc liên quan đến siêu dữ liệu (chẳng hạn như drop_all hoặc create_all), bạn không thể sử dụng các phương pháp Flask-SQLAlchemy. Bạn phải sử dụng siêu dữ liệu gốc, liên kết với công cụ Flask-SQLAlchemy.
Tôi chưa thử điều này, vì vậy tôi không chắc liệu có bất kỳ gotchas nào khác trong cách tiếp cận này hay không. Bạn có thể muốn tham gia vào vé đó nếu bạn tìm thấy bất kỳ vé nào.
Nguồn
2013-10-01 16:13:29
nó sẽ là một vấn đề để viết lại các kịch bản dòng lệnh bằng cách sử dụng mô hình bình phương sqlalchemy? –
Tôi không biết - đã không sử dụng bình trước, hoặc giả kim bình và không biết tác dụng phụ. Các tập lệnh có cần phải được viết lại hay chỉ là mô hình được nhập khẩu? Tôi cũng nên đề cập rằng tôi đã sử dụng alembic để theo dõi các thay đổi của cơ sở dữ liệu, trong trường hợp có bất kỳ vấn đề tương thích nào ở đó. –