我正在尝试使用 python flask-restx 模块来休息服务器。我的表有两列id
和value
. id
column 是一个自增主键。所以对于帖子我不需要通过id
,但get
我需要在回复中显示它。
- 有什么办法可以避免创建两个表?
- 有什么办法可以直接将 sqlalchamy 模型映射到 flask-restx 模型。
- 如何处理 sqlalchamy 会话对象。现在,我正在为每个方法创建这个对象。拥有一个全局会话对象是一个好主意,我怎样才能将它附加到我的烧瓶会话对象?
以下是我的做法。
app = Flask(__name__)
api = Api(app)
demo_api_intake_model = api.model(
'demo_intake',
{
"value": fields.String(required=True, description="value")
}
)
demo_api_output_model = api.model(
'demo_output',
{
"id": fields.Integer(required=True, description="unique identifier, primary key"),
"value": fields.String(required=True, description="value")
}
)
@api.route("/demo")
class Demo(Resource):
@api.marshal_list_with(demo_api_output_model, code=200)
def get(self):
return get_session().query(DemoModel).all()
@api.expect(demo_api_intake_model)
def post(self):
json_data = request.get_json()
demo_model = DemoModel(value=json_data.get("value"))
session = get_session()
session.add(demo_model)
session.commit()
return demo_model.id
数据库.py
def _create_database_connection(db_user, db_pass, db_name, instance_connection_name):
pool = sqlalchemy.create_engine(
sqlalchemy.engine.url.URL.create(
drivername="mysql+pymysql",
username=db_user, # e.g. "my-database-user"
password=my_pass, # e.g. "my-database-password"
database=db_name, # e.g. "my-database-name"
host="10.10.10.21", # e.g. "127.0.0.1"
port=3306, # e.g. 3306
),
# **db_config
)
Session = sessionmaker(bind=pool)
session = Session()
return session
def get_session():
connection = _create_database_connection(db_user="admin", db_pass=os.getenv("db_pass"),db_name=os.getenv("db_name))
return connection