国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發 > Python > 正文

Python-Flask:動態創建表的示例詳解

2024-09-09 19:02:41
字體:
來源:轉載
供稿:網友

今天小編從項目的實際出發,由于項目某一個表的數據達到好幾十萬條,此時數據的增刪查改會很慢;為了增加提高訪問的速度,我們引入動態創建表。

代碼如下:

from app_factory import appfrom sqlalchemy import Column, String, Integer class ProjectModel(app.db.model, app.db.Mixin):   tablename = 'Project_'   ID = Column(String(50), name='ID', doc='id')  PROJECTNUMBER = Column(String(100), name='PROJECTNUMBER', doc='項目編號')  ......    @staticmethod  def create_table(project_number)    table_name = ProjectModel.tablename + projectnumber    structs = [      {'fieldname': 'id', 'type': 'varchar2(50)', 'primary': True, 'default': ''},      {'fieldname': 'PROJECTNUMBER', 'type': 'varchar2(50)', 'default': 0, 'isnull':                 True},      .......    ]    app.db.create_table(table_name, structs)

那么,內層函數是如何創建的呢?其實就是拼接sql語句create table ....

代碼如下:

class SQLAlchemyDB(SQLAlchemy):  def __init__(self, app)    super(SQLAlchemyDB, self).__init__(app)    self.__app = app    self.engine.echo = False    self.conn = self.engine.connect()    self.Model.to_dict() = lambda self:{c.name:getattr(self, c.name, None) for c in self.__table__.columns}    self.Session = sessionmaker(bind=self.engine)    self.ScopedSession = lambda: scoped_session(self.Session)   # 釋放碎片空間  def free_idle_space(self):    return self.execute('purge recyclebin')    def connstatus(self):    return self.engine.pool.status()    def close(self):    self.conn.close()    self.engine.dispose()   # 非返回數據的記錄語句  def execute(self, sqlexpr)    try:      ret = self.conn.execute(sqlalchemy.text(sqlexpr))    except Exception as err:      return False, str(err)    except sqlalchemy.exc.InvalidRequestError as err:      return False, str(err)     return True, ''   # 動態拼接sql語句, 創建表  def create_table(self, tablename, structs):    fieldinfos = []    for struct in structs:      defaultvalue = struct.get('default')      if defaultvalue :        defaultvalue = "'{0}'".format(defaultvalue) if type(defaultvalue) == 'str' else str(defaultvalue)      fieldinfos.append('{0} {1} {2} {3} {4}'.format(struct['fieldname'], struct['type'], 'primary key' if struct.get('primary') else '', ('default' + defaultvalue) if defaultvalue else '', '' if struct.get('isnull') else 'not null'))    sql = 'create table {0} ({1})'.format(tablename, ','.join(fieldinfos))    ret, err = self.execute(sql)    if ret:      self.__app.sync_record(tablename, 'sql_createtable', {}, sql)    return ret, err   # 動態判斷表是否存在   def existtable(self, tablename):    ret, err = self.GetRecordCount("user_all_table", "TABLE_NAME='" + tablename +"'")    return ret>0, err    def GetRecordCount(self, tablename, where= None):    sql = 'select count(*) as num from {0} {1}'.format(tablename,('where' + where)) if where != None else '')    recs, err = self.query(sql)    if recs:      for rec in recs:        return rec['num'], ''     return -1 , err    # 查詢數據記錄  def query(self, sqlexpr):    try:      recs = self.conn.execute(sqlalchemy.text(sqlexpr)      return recs, ''    expect Exception as err:      return None, str(err)      expect sqlalchemy.exc.InvalidRequestError as err:      return None, str(err)   
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 新竹市| 丰宁| 江门市| 阿鲁科尔沁旗| 湟中县| 沂南县| 苗栗市| 顺平县| 凌海市| 赫章县| 石楼县| 荃湾区| 蓬莱市| 隆昌县| 沙河市| 庆安县| 临安市| 静乐县| 普洱| 蓬溪县| 樟树市| 阳曲县| 铅山县| 天镇县| 阿勒泰市| 吉隆县| 凉山| 常州市| 龙口市| 石门县| 金塔县| 城固县| 泽库县| 合阳县| 昌都县| 安远县| 晋城| 长丰县| 清镇市| 巍山| 杭锦后旗|