Python SqlAlchemy動態添加資料表欄位執行個體解析,pythonsqlalchemy

來源:互聯網
上載者:User

Python SqlAlchemy動態添加資料表欄位執行個體解析,pythonsqlalchemy

本文研究的主要是Python SqlAlchemy動態添加資料表欄位,具體如下。

我們知道使用SqlAlchemy建立類來映射資料表,類屬性等於資料庫欄位,但有時候要在我們建立表的時候,不確定資料表欄位數量,遇到這種情況,應如何解決?

先看常規用法

from sqlalchemy import create_engine,Column,String,Integerclass 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 sessionmakerfrom sqlalchemy.ext.declarative import declarative_baseengine = create_engine('mysql+pymysql://root:1234@localhost/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實現插入

總結

以上就是本文關於Python SqlAlchemy動態添加資料表欄位執行個體解析的全部內容,希望對大家有所協助。感興趣的朋友可以繼續參閱本站其他相關專題,如有不足之處,歡迎留言指出。感謝朋友們對本站的支援!

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.