python ORM - sqlalchemy 操作使用

來源:互聯網
上載者:User

標籤:meta   comm   commit   connect   com   時間   password   執行個體   映射   

python操作資料庫

使用 ORM - sqlalchemy,pymsql

安裝:

pip install pymsqpip install sqlalchemy

一、 ‘‘‘串連資料庫‘‘‘

 ‘‘‘匯入必須的包‘‘‘
from sqlalchemy import create_enginefrom sqlalchemy.ext.declarative import declarative_basefrom sqlalchemy.orm import sessionmaker
# 基本設定 HOSTNAME = ‘127.0.0.1‘   # 本地 liunxPOST = ‘3306‘            # mysql 預設連接埠DATABASE = ‘mydb‘        # 資料庫名字USERNAME = ‘admin‘       # 使用者名稱PASSWORD = ‘Root110qwe‘  # 密碼
# 固定寫法
db_url = ‘mysql+pymysql://{}:{}@{}:{}/{}?charset=utf8‘.format( USERNAME, PASSWORD, HOSTNAME, POST, DATABASE)
# 這裡的 db_url 就是串連資料庫的路徑。“mysql+mysqldb”指定了使用 MySQL-Python 來連
engine = create_engine(db_url,echo=False)   # 初始化資料庫連接, 
# create_engine() 會返回一個資料庫引擎,echo 參數為 True 時,會顯示每條執行的 SQL 陳述式,生產環境下可關閉。
Base = declarative_base(engine) # 建立對象的基類
Session = sessionmaker(engine) # 建立與資料庫連接的Session類
session = Session() # session可以視為資料庫連接
# sessionmaker() 會產生一個資料庫會話類。這個類的執行個體可以當成一個資料庫連接,它同時還記錄了一些查詢的資料,並決定什麼時候執行 SQL 陳述式。
if __name__ == ‘__main__‘:  # 測試是否串連成功    connection = engine.connect()    result = connection.execute(‘select 1‘)    print(result.fetchone())



二 、 ‘‘‘建立 類—表 映射關係‘‘‘

 

     建立表的同時,也映射資料庫;也可以單獨建立表,

# -*- coding:utf-8 -*-from datetime import datetimefrom sqlalchemy import Column,Integer,String,DateTime from connect import Base,session # 這裡connect前面加上點之後 不能直接執行檔案,但是可以外部調用‘‘‘建立表 user ‘‘‘class User(Base):    __tablename__ = ‘user‘    id = Column(Integer,primary_key=True,autoincrement=True) #主鍵 ,自增長    username = Column(String(20),nullable=False) # 使用者名稱長度 20 、非空    password = Column(String(50)) # 密碼長度 50    creatime = Column(DateTime,default=datetime.now) # 建立時間    @classmethod    def by_name(cls,name): # 定義查詢函數,返回查詢結果        return session.query(cls).filter(cls.username==name).first()    def __repr__(self): # 重寫repr 便於閱讀        return "<User(id=%s,username%s,password=%s,createtime=%s)>" % (            self.id,            self.username,            self.password,            self.creatime        )from sqlalchemy.orm import relationshipfrom sqlalchemy import ForeignKey‘‘‘建立表 user_details ‘‘‘class UserDetails(Base):    __tablename__=‘user_details‘    id = Column(Integer, primary_key=True, autoincrement=True)    id_card = Column(Integer,nullable=True,unique=True)    lost_login = Column(DateTime)    login_num = Column(Integer,default=0)    user_id = Column(Integer,ForeignKey(‘user.id‘))    ‘‘‘    User 要關聯的表的名字    backref 返回 details 方法(屬性)    uselist 預設為True, 表示一對多關聯性(False表示一對一)    cascade 自動處理關係 相當於mysql中的ON DELETE 類似 有 7 個選擇性參數    在代碼層控制    ‘‘‘    userdetail = relationship(‘User‘,backref=‘details‘,uselist=False,cascade=‘all‘)    def __repr__(self):  # 重寫repr 便於閱讀        return ‘<UserDetails(id=%s,id_card=%s,last_login=%s,login_num=%s,user_id=%s)>‘%(            self.id,            self.id_card,            self.lost_login,            self.login_num,            self.user_id        )from sqlalchemy import  Table‘‘‘ 建立表的另一種方法 這種方法沒有映射,如果需要映射 還需重新建立 類,重寫 repr‘‘‘user_article = Table(‘user_article‘,Base.metadata,     Column(‘user_id‘,Integer,ForeignKey(‘user.id‘),primary_key=True),     Column(‘article_id‘,Integer,ForeignKey(‘article.id‘),primary_key=True) )


‘‘‘建立表 article ‘‘‘class Article(Base):    __tablename__ = ‘article‘    id = Column(Integer,primary_key=True,autoincrement=True)    content = Column(String(50),nullable=True)    create_time = Column(DateTime,default=datetime.now())    article_user = relationship(‘User‘,backref=‘article‘,secondary=user_article)# 建立映射關係    def __repr__(self):  # 重寫repr 便於閱讀        return  ‘Article(id=%s,content=%s,create_time=%s)‘%(            self.id,            self.content,            self.create_time        )if __name__ == ‘__main__‘:    Base.metadata.create_all() # 執行

 

三 、 ‘‘‘簡單的 增、刪、查、改 操作 ‘‘‘

 

 

# -*- coding:utf-8 -*-from connect import sessionfrom user_module import Userdef add_user(): # 增    # persson = User(username=‘xiaohong‘,password=‘qwe123‘,id=1)    # session.add(persson)  # 提交單條資料    # 一次提交多條資料 , 注意 這裡 all 裡面是列表    session.add_all(        [        User(username=‘小紅‘, password=‘qwe123mmm‘),        User(username=‘老王‘, password=‘12345nnnnn‘),        User(username=‘小明‘, password=‘654321hhhhh‘),        ]    )    session.commit() # 必須提交def search_user(): # 查詢 預設repr 便於機器閱讀,需要重寫    rows = session.query(User).all()    print(rows)def update_user(): # 改    session.query(User).filter(User.id==2).update({User.password:1})    session.commit()def delete_user(): # 刪除    # rows = session.query(User).filter(User.id==2)[0]    rows = session.query(User).all()    print(rows)    for i in rows: # 如果查到的資料量大,就是用迴圈刪除         session.delete(i)    session.commit()if __name__ == ‘__main__‘:    add_user()    # search_user()    # delete_user()    # update_user()

 

 

 

 

 

 

 

推薦文章:廖雪峰的  使用SQLAlchemy 

       指令碼之家的   Python SQLAlchemy基本操作和常用技巧(包含大量執行個體,非常好)

       z+j  的  Python SqlAlchemy使用方法

      K.Takanashi 的 SQLAlchemy的初步使用 

     SQLAlchemy入門(一)

 

python ORM - 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.