1

我正在尝试使用 python flask-restx 模块来休息服务器。我的表有两列idvalue. idcolumn 是一个自增主键。所以对于帖子我不需要通过id,但get我需要在回复中显示它。

  1. 有什么办法可以避免创建两个表?
  2. 有什么办法可以直接将 sqlalchamy 模型映射到 flask-restx 模型。
  3. 如何处理 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
4

0 回答 0