SQLAlchemy安裝
- 安裝
- pip install sqlalchemy -i https://pypi.douban.com/simple
- 連接的時候依賴pymysql
通過SQLAlchemy連接資料庫
- from sqlalchemy import create_engine
- # 資料庫的配置變數
- HOSTNAME = '127.0.0.1'
- PORT = '3306'
- DATABASE = 'xt_flask'
- USERNAME = 'root'
- PASSWORD = 'root'
- DB_URI = 'mysql+mysqldb://{}:{}@{}:{}/{}'.format(USERNAME,PASSWORD,HOSTNAME,PORT,DATABASE)
- # 創建資料庫引擎
- engine = create_engine(DB_URI)
- #創建連接
- with engine.connect() as con:
- rs = con.execute('SELECT 1')
- print rs.fetchone()
- 首先從sqlalchemy中匯入create_engine,用這個函式來創建引擎,然后用engine.connect()來連接資料庫,其中一個比較重要的一點是,通過create_engine函式的時候,需要傳遞一個滿足某種格式的字串,對這個字串的格式來進行解釋:
- dialect+driver://username:password@host:port/database
- dialect是資料庫的實作,比如MySQL、PostgreSQL、SQLite,并且轉換成小寫,driver是Python對應的驅動,如果不指定,會選擇默認的驅動,比如MySQL的默認驅動是MySQLdb,username是連接資料庫的用戶名,password是連接資料庫的密碼,host是連接資料庫的域名,port是資料庫監聽的埠號,database是連接哪個資料庫的名字,
- 如果以上輸出了1,說明SQLAlchemy能成功連接到資料庫,
SQLAlchemy引數
- Column常用引數:
- default:默認值,
- nullable:是否可空,
- primary_key:是否為主鍵,
- unique:是否唯一,
- autoincrement:是否自動增長,
- onupdate:更新的時候執行的函式,
- name:該屬性在資料庫中的欄位映射,
- sqlalchemy常用資料型別:
- Integer:整形,
- Float:浮點型別,
- Boolean:傳遞True/False進去,
- DECIMAL:定點型別,
- enum:列舉型別,
- Date:傳遞datetime.date()進去,
- DateTime:傳遞datetime.datetime()進去,
- Time:傳遞datetime.time()進去,
- String:字符型別,使用時需要指定長度,區別于Text型別,
- Text:文本型別,
- LONGTEXT:長文本型別,
- query可用引數:
- 模型物件,指定查找這個模型中所有的物件,
- 模型中的屬性,可以指定只查找某個模型的其中幾個屬性,
- 聚合函式,
- func.count:統計行的數量,
- func.avg:求平均值,
- func.max:求最大值,
- func.min:求最小值,
- func.sum:求和,
創建表
- # -*- coding: utf-8 -*-
- from sqlalchemy.ext.declarative import declarative_base
- from sqlalchemy import Column # 列
- from sqlalchemy import Integer, String # 屬性
- Base = declarative_base() # django models
- # 創建表
- class User(Base):
- __tablename__ = 'user'
- id = Column(Integer, primary_key=True, autoincrement=True)
- name = Column(String(32), index=True, name='名字')
- # 資料庫連接
- from sqlalchemy import create_engine
- engine = create_engine("mysql+pymysql://root:[email protected]:3306/my_sql?charset=utf8")
- # 去engine資料庫中創建所有繼承Base的表
- Base.metadata.create_all(engine)
增加資料
- # -*- coding: utf-8 -*-
- from .create import engine, User
- # 增加資料
- # 創建會話視窗
- from sqlalchemy.orm import sessionmaker
- Session = sessionmaker(engine)
- # 打開會話視窗
- db_session = Session()
- # ---單條資料
- user_obj = User(name='Ywb') # 實體化
- db_session.add(user_obj) # 相當于 insert into
- # 執行會化視窗中的所有操作
- db_session.commit()
- db_session.close()
- # ---增加批量資料
- db_session.add_all([
- User(name='peach'),
- User(name='小紅')
- ])
- db_session.commit()
- db_session.close()
- # ---擴展
- user1 = User(name='11')
- user2 = User(name='12')
- user3 = User(name='13')
- user4 = User(name='14')
- db_session.add(user1)
- db_session.add(user2)
- db_session.add(user3)
- db_session.add(user4)
- db_session.commit() # 全部添加進去
- db_session.close()
過濾
- 過濾是資料提取的一個很重要的功能,以下對一些常用的過濾條件進行解釋,并且這些過濾條件都是只能通過filter方法實作的:
- equals:
- query.filter(User.name == 'ed')
- not equals:
- query.filter(User.name != 'ed')
- like:
- query.filter(User.name.like('%ed%'))
- in:
- query.filter(User.name.in_(['ed','wendy','jack']))
- # 同時,in也可以作用于一個Query
- query.filter(User.name.in_(session.query(User.name).filter(User.name.like('%ed%'))))
- not in:
- query.filter(~User.name.in_(['ed','wendy','jack']))
- is null:
- query.filter(User.name==None)
- # 或者是
- query.filter(User.name.is_(None))
- is not null:
- query.filter(User.name != None)
- # 或者是
- query.filter(User.name.isnot(None))
- and:
- from sqlalchemy import and_
- query.filter(and_(User.name=='ed',User.fullname=='Ed Jones'))
- # 或者是傳遞多個引數
- query.filter(User.name=='ed',User.fullname=='Ed Jones')
- # 或者是通過多次filter操作
- query.filter(User.name=='ed').filter(User.fullname=='Ed Jones')
- or:
- from sqlalchemy import or_
- query.filter(or_(User.name=='ed',User.name=='wendy'))
單表查詢
- # -*- coding: utf-8 -*-
- # 單表查詢
- from sqlalchemy.orm import sessionmaker
- from SQLAlchemy.create import engine, User
- Session = sessionmaker(engine)
- db_session = Session()
- # ---基本查詢
- # select * from name
- user_list = db_session.query(User)
- print(user_list) # SELECT user.`名字` AS `user_名字`, user.id AS user_id FROM user
- # ---------------- 所有資料 ------------------
- user_list = db_session.query(User).all() # [obj, obj]
- for usr in user_list:
- print(usr.name)
- # ---------------- 一條資料 ------------------
- user = db_session.query(User).first() # obj
- print(user.name)
- # ---------------- 帶條件查詢 ------------------
- # --- filter
- user_list = db_session.query(User).filter(User.id==2).all() # [obj, obj]
- print(user_list)
- user_list = db_session.query(User).filter(User.id >= 1).all() # [obj, obj]
- for user in user_list:
- print(user.id) # 按照id排序,因為添加是id
- # --- filter_by
- user = db_session.query(User).filter_by(id=2).first() # obj
- print(user)
- # --- 擴展-查看sql陳述句
- sql = db_session.query(User).filter(User.id >= 1)
- print(sql)
- """
- SELECT user.`名字` AS `user_名字`, user.id AS user_id
- FROM user
- WHERE user.id >= %(id_1)s
- """
修改
- # -*- coding: utf-8 -*-
- # 更新修改資料
- from sqlalchemy.orm import sessionmaker
- from SQLAlchemy.create import engine,User
- Session = sessionmaker(engine)
- db_session = Session()
- # 單條修改
- # update `uesr` set `name` = 'haha' where id =1
- res = db_session.query(User).filter(User.id==1).update({
- "name": 'haha'
- })
- print(res) # 回傳影響的行數
- db_session.commit()
- db_session.close()
- # 批量修改
- res = db_session.query(User).filter(User.id > 1).update({
- "name": "1234"
- })
- print(res)
- db_session.commit()
- db_session.close()
洗掉
- # -*- coding: utf-8 -*-
- # 洗掉資料
- from sqlalchemy.orm import sessionmaker
- from SQLAlchemy.create import engine,User
- Session = sessionmaker(engine)
- db_session = Session()
- # 洗掉單條
- # delete from user where id = 1
- res = db_session.query(User).filter(User.id==1).delete()
- print(res) # 回傳影響的行數
- db_session.commit()
- db_session.close()
- # 洗掉多條
- res = db_session.query(User).filter(User.name=="12345").delete()
- print(res)
- db_session.commit()
- db_session.close()
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/18452.html
標籤:SQL Server
上一篇:SqlServer操作大容量資料
下一篇:sql server
