cari

Rumah  >  Soal Jawab  >  teks badan

mysql - python开发web service 中数据库链接和释放应该怎么处理?

用tornado开发web service服务。服务端根据接收到的json数据对mysql数据库进行查询,并把结果反馈给用户。采用sqlalchemy对数据库进行操作,以下对数据库链接的创建,释放是否合理呢?

class db:

    def __init__(self,db_ip='',db_name='',db_user='',db_pass='',db_charset=''):
        self.db_str = 'mysql+pymysql://'+db_user+':'+db_pass+'@'+db_ip+':3306/'+db_name+'?'+'charset='+db_charset
        self.engine = create_engine(self.db_str, encoding='utf-8', echo=False)
        self.dbsession = sessionmaker(bind=self.engine)
        
    def return_dbsession(self):
        return self.dbsession
        
    def close_session(self):
        self.session.close()
database = db(db_ip='127.0.0.1', db_name='data_utf', db_user='root', db_pass='root', db_charset='utf8')

处理post请求代码如下

class rcvRequest(tornado.web.Request):
    session = scoped_session(database.return_dbsession())()
    response = []
    for ctt in session.query(table).filter(table.ID == id):
        response.append(ctt)
    self.write(str(response))
    session.close()
ringa_leeringa_lee2781 hari yang lalu676

membalas semua(4)saya akan balas

  • 高洛峰

    高洛峰2017-04-18 10:22:17

    Tidak munasabah untuk mewujudkan sambungan untuk setiap permintaan?
    sqlalchemy boleh membantu anda mengurus kumpulan sambungan dengan baik.

    balas
    0
  • 阿神

    阿神2017-04-18 10:22:17

    Adakah munasabah untuk melaraskan kod dengan cara berikut?

    def db(db_ip='',db_name='',db_user='',db_pass='',db_charset=''):
            db_str = 'mysql+pymysql://'+db_user+':'+db_pass+'@'+db_ip+':3306/'+db_name+'?'+'charset='+db_charset
            engine = create_engine(self.db_str, encoding='utf-8', echo=False)
            dbsession = sessionmaker(bind=self.engine)
            return dbsession
    
    database =db(db_ip='127.0.0.1', db_name='data_utf', db_user='root', db_pass='root', db_charset='utf8')
            
    class rcvRequest(tornado.web.Request):
    
        def initialize(self):
            self.session = scoped_session(database)()
            
        @tornado.gen.coroutine
        def post(self):
            response = []
            for ctt in self.session.query(table).filter(table.ID == id):
                response.append(ctt)
            self.write(str(response))
        
        def on_finish(self):
            self.session.close()

    balas
    0
  • 阿神

    阿神2017-04-18 10:22:17

    Masih disyorkan untuk mencari ORM. Jika anda meminta pautan seperti ini sekali, perkhidmatan data mungkin menutup telefon.

    balas
    0
  • 阿神

    阿神2017-04-18 10:22:17

    Sila rujuk
    https://github.com/PyMySQL/To...

    balas
    0
  • Batalbalas