sqlalchemy根據表名動態建立model類

2022-03-28 13:56:34 字數 2246 閱讀 5595

作用如題,直接上**吧,另外還支援 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類

sqlalchemy根據表名動態建立model類 作用如題,直接上 吧,另外還支援 copy一張表的表結構,新建表並獲得model物件 coding utf 8 import traceback from sqlalchemy import biginteger,column,datetime,in...

根據字段內容查詢表名

儲存指定資料庫中的表名 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...