python ORM - sqlalchemy 操作使用
生活随笔
收集整理的這篇文章主要介紹了
python ORM - sqlalchemy 操作使用
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
python操作數據庫
使用 ORM - sqlalchemy,pymsql
安裝:
pip install pymsq pip install sqlalchemy一、?'''連接數據庫'''
?'''導入必須的包'''from sqlalchemy import create_engine from sqlalchemy.ext.declarative import declarative_base from sqlalchemy.orm import sessionmaker # 基本設置 HOSTNAME = '127.0.0.1' # 本地 liunx POST = '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 datetime from 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)) # 密碼長度 50creatime = Column(DateTime,default=datetime.now) # 創建時間 @classmethoddef 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 relationship from 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 session from 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入門(一)
?
轉載于:https://www.cnblogs.com/zlsgh/p/8538911.html
總結
以上是生活随笔為你收集整理的python ORM - sqlalchemy 操作使用的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: spring cloud各组件详解
- 下一篇: 近几年难得一见的一道好推理题