Python SqlAlchemy動態新增資料表字段
阿新 • • 發佈:2019-01-08
SqlAlchemy版本:1.2
作業系統:Windows
Python:3.5
歡迎加入學習交流QQ群:657341423
我們知道使用SqlAlchemy建立類來對映資料表,類屬性等於資料庫欄位,但有時候要在我們建立表的時候,不確定資料表字段數量,遇到這種情況,應如何解決?
先看常規用法
from sqlalchemy import create_engine,Column,String,Integer class Mybase(Base): #表名 __tablename__ ='mycars' #欄位,屬性 myid=Column(String(50), primary_key=True) price=Column(String(50))
上述程式碼是建立mycars資料表,欄位分別為myid和price,欄位數量是固定,那麼要實現動態建立數量不明確的欄位,程式碼如下:
from sqlalchemy import * from sqlalchemy.orm import sessionmaker from sqlalchemy.ext.declarative import declarative_base engine = create_engine('mysql+pymysql://root:[email protected]/test?charset=utf8', echo=False) # engine = create_engine('sqlite:////MyDB.sqlite3', echo=False) DBSession = sessionmaker(bind=engine) session = DBSession() Base = declarative_base() #定義類 class table_class(Base): __tablename__ = 'aaa' id=Column(Integer,primary_key=True) # 動態新增欄位 for i in range(3): setattr(table_class,'Col'+str(i),(Column('Col'+str(i), String(50),comment='Col'+str(i)))) Base.metadata.create_all(engine) # 新增資料 dt=table_class(Col1='aaa',Col2="aaa") session.add(dt) session.commit()
上述程式碼可看出,通過使用setattr()來實現動態新增欄位,而且欄位名可根據實際命名,comment是欄位註釋,這個只有SqlAlchemy 1.2版本才有的功能
(SqlAlchemy 1.2 安裝 :pip install --pre sqlalchemy)
執行結果:
當然,在插入資料和查詢資料的時候,會出現無法確定程式碼中對應欄位的屬性。可以使用SqlAlchemy執行sql實現插入