sqlalchemy根據表名動態建立model類
作用如題,直接上**吧,另外還支援 copy一張表的表結構,新建表並獲得model物件
# coding: utf-8
import traceback
from sqlalchemy import (biginteger, column, datetime, integer, metadata,
string, table, create_engine, text)
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.schema import createtable
# 本地資料庫
enginelocal = create_engine('mysql+pymysql:')
base = declarative_base()
metadata = metadata()
def dicttoobj(results, to_class):
"""將字典list或者字典轉化為指定類的物件list或指定類的物件
python 支援動態給物件新增屬性,所以字典中存在而該類不存在的會直接新增到對應物件
"""if isinstance(results, list):
objl =
for result in results:
obj = to_class()
for r in result.keys():
obj.__setattr__(r, result[r])
return objl
else:
try:
obj = to_class()
for r in results.keys():
obj.__setattr__(r, results[r])
return obj
except exception as e:
print(e)
traceback.print_exc()
return none
# else:
# print("傳入物件非字典或者list")
# return none
def getmodel(name, engine):
"""根據name建立並return乙個新的model類
name:資料庫表名
engine:create_engine返回的物件,指定要操作的資料庫連線,from sqlalchemy import create_engine
"""base.metadata.reflect(engine)
table = base.metadata.tables[name]
t = type(name,(object,),dict())
base.metadata.clear()
return t
def createtablefromtable(name, tablenam, engine):
"""copy乙個已有表的結構,並建立新的表
"""metadata = metadata(engine)
base.metadata.reflect(engine)
# 獲取原表物件
table = base.metadata.tables[tablenam]
# 獲取原表建表語句
c = str(createtable(table))
# 替換表名
c = c.replace("create table " + tablenam, "create table if not exists " + name)
db_conn = engine.connect()
db_conn.execute(c)
db_conn.close()
base.metadata.clear()
def getnewmodel(name, tablenam, engine):
"""copy乙個表的表結構並建立新的名為name的表並返回model類
name:資料庫表名
tablenam:copy的表表名
engine:create_engine返回的物件,指定要操作的資料庫連線,from sqlalchemy import create_engine
"""createtablefromtable(name, tablenam, engine)
return getmodel(name, engine)
sqlalchemy根據表名動態建立model類
作用如題,直接上 吧,另外還支援 copy一張表的表結構,新建表並獲得model物件 coding utf 8 import traceback from sqlalchemy import biginteger,column,datetime,integer,metadata,string,tab...
根據字段內容查詢表名
儲存指定資料庫中的表名 create table t id int identity 1,1 t name varchar 100 null,rc int null 儲存指定表的所有列名 create table t c id int identity 1,1 t c varchar 100 nul...
根據表名獲取表字段資訊
實際應用中不免需要調取資料庫表字段的相關資訊,特此將 貼出,以作備用,調取的資訊 欄位名 字段型別 字段長度 是否主鍵 說明 建立sqlparameter public class cp public sqldbtype coltype public int collength public boo...