亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Python-Flask:動(dòng)態(tài)創(chuàng)建表的示例詳解

 更新時(shí)間:2019年11月22日 16:32:23   作者:Odyssues_lee  
今天小編就為大家分享一篇Python-Flask:動(dòng)態(tài)創(chuàng)建表的示例詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧

今天小編從項(xiàng)目的實(shí)際出發(fā),由于項(xiàng)目某一個(gè)表的數(shù)據(jù)達(dá)到好幾十萬(wàn)條,此時(shí)數(shù)據(jù)的增刪查改會(huì)很慢;為了增加提高訪問(wèn)的速度,我們引入動(dòng)態(tài)創(chuàng)建表。

代碼如下:

from app_factory import app
from 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='項(xiàng)目編號(hào)')
  ......
 
 
  @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)

那么,內(nèi)層函數(shù)是如何創(chuàng)建的呢?其實(shí)就是拼接sql語(yǔ)句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()
 
  # 非返回?cái)?shù)據(jù)的記錄語(yǔ)句
  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, ''
 
  # 動(dòng)態(tài)拼接sql語(yǔ)句, 創(chuàng)建表
  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
 
  # 動(dòng)態(tài)判斷表是否存在 
  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
  
  # 查詢數(shù)據(jù)記錄
  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)  
 

那么,類(lèi)似的:

1-如果動(dòng)態(tài)的對(duì)已經(jīng)創(chuàng)建的表格進(jìn)行增刪查改,那么可以用類(lèi)似的思想,進(jìn)行對(duì)sql語(yǔ)句進(jìn)行拼接,insert select delete update

2-判斷是否存在此字段,進(jìn)去拼接查詢這個(gè)字段查出的數(shù)據(jù)是否為空(count)

3-在原來(lái)表的基礎(chǔ)上增加字段,或者修改字段,用alter

以上這篇Python-Flask:動(dòng)態(tài)創(chuàng)建表的示例詳解就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • Python輕松管理與操作文件的技巧分享

    Python輕松管理與操作文件的技巧分享

    在日常開(kāi)發(fā)中,我們經(jīng)常會(huì)遇到需要對(duì)文件進(jìn)行操作的場(chǎng)景,如讀寫(xiě)文件、文件夾操作等。本文將為大家介紹一些 Python 中處理文件的實(shí)用技巧,讓你的工作更高效
    2023-05-05
  • Python 使用 raise 語(yǔ)句拋出異常的流程分析

    Python 使用 raise 語(yǔ)句拋出異常的流程分析

    在Python編程中,異常處理是至關(guān)重要的一部分,本文將探討 Python 中 raise 語(yǔ)句的使用方法以及如何通過(guò) raise 語(yǔ)句來(lái)拋出各種類(lèi)型的異常,從而有效地進(jìn)行異常處理,感興趣的朋友跟隨小編一起看看吧
    2021-02-02
  • Python字典“鍵”和“值”的排序5種方法

    Python字典“鍵”和“值”的排序5種方法

    這篇文章主要介紹了5種Python字典“鍵”和“值”的排序方法,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-03-03
  • pandas 選擇某幾列的方法

    pandas 選擇某幾列的方法

    今天小編就為大家分享一篇pandas 選擇某幾列的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-07-07
  • python對(duì)比兩個(gè)字典dict的差異詳解

    python對(duì)比兩個(gè)字典dict的差異詳解

    這篇文章主要為大家詳細(xì)介紹了python?如何對(duì)比兩個(gè)字典dict的不同差異,文中的示例代碼簡(jiǎn)潔易懂,具有一定的學(xué)習(xí)價(jià)值,感興趣的可以了解一下
    2023-05-05
  • python 無(wú)損批量壓縮圖片(支持保留圖片信息)的示例

    python 無(wú)損批量壓縮圖片(支持保留圖片信息)的示例

    這篇文章主要介紹了python 無(wú)損批量壓縮圖片的示例,幫助大家更好的利用python處理圖片,感興趣的朋友可以了解下
    2020-09-09
  • 深入理解Python 關(guān)于supper 的 用法和原理

    深入理解Python 關(guān)于supper 的 用法和原理

    這篇文章主要介紹了Python 關(guān)于supper 的 用法和原理分析,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友參考下吧
    2018-02-02
  • tornado框架blog模塊分析與使用

    tornado框架blog模塊分析與使用

    這篇文章主要介紹了tornado框架blog模塊的使用方法,大家參考使用吧
    2013-11-11
  • 靈活運(yùn)用Python 枚舉類(lèi)來(lái)實(shí)現(xiàn)設(shè)計(jì)狀態(tài)碼信息

    靈活運(yùn)用Python 枚舉類(lèi)來(lái)實(shí)現(xiàn)設(shè)計(jì)狀態(tài)碼信息

    在python中枚舉是一種類(lèi)(Enum,IntEnum),存放在enum模塊中。枚舉類(lèi)型可以給一組標(biāo)簽賦予一組特定的值,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-09-09
  • Python中set方法的使用教程詳解

    Python中set方法的使用教程詳解

    在Python中,set是一種集合數(shù)據(jù)類(lèi)型,表示一個(gè)無(wú)序且不重復(fù)的集合。本文主要為大家詳細(xì)介紹了Python中set方法的使用,需要的可以參考一下
    2023-04-04

最新評(píng)論