Python-Flask:동적 생 성 표 의 예제 상세 설명
코드 는 다음 과 같 습 니 다:
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=' ')
......
@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)
그러면 비슷 한 것:1.만 든 표를 동적 으로 삭제 하고 수정 하면 유사 한 사상 으로 sql 문 구 를 연결 할 수 있 습 니 다.insert selected delete update
2-이 필드 가 존재 하 는 지 판단 하고 이 필드 에 들 어가 서 찾 은 데이터 가 비어 있 는 지 확인 합 니 다(count)
3.원래 표 에 필드 를 추가 하거나 필드 를 수정 할 때 alter 를 사용 합 니 다.
이상 의 Python-Flask:동적 생 성 표 의 예제 상세 한 설명 은 바로 편집장 이 여러분 에 게 공유 한 모든 내용 입 니 다.여러분 께 참고 가 되 고 저 희 를 많이 사랑 해 주 셨 으 면 좋 겠 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Python의 None과 NULL의 차이점 상세 정보그래서 대상 = 속성 + 방법 (사실 방법도 하나의 속성, 데이터 속성과 구별되는 호출 가능한 속성 같은 속성과 방법을 가진 대상을 클래스, 즉 Classl로 분류할 수 있다.클래스는 하나의 청사진과 같아서 하나의 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.