1. 程式人生 > >Python SqlAlchemy動態新增資料表字段

Python SqlAlchemy動態新增資料表字段

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實現插入