#!/usr/bin/python
# -*- coding: utf-8 -*-
from sqlalchemy import create_engine
from sqlalchemy import Table, MetaData, Column, Integer, String
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import mapper, sessionmaker
# 創建實例,並連接test庫
engine = create_engine("mysql+pymysql://root:123@localhost/demoDb?charset=utf8", encoding='utf-8', echo=True)
metadata = MetaData()
# echo=False 顯示信息
Base = declarative_base() # 生成orm基類
class User(Base):
__tablename__ = 'user' # 表名
id = Column(Integer, primary_key=True)
name = Column(String(32))
password = Column(String(64))
def __init__(self):
# 創建與數據庫的會話session class ,注意,這里返回給session的是個class,不是實例 self.session_class = sessionmaker(bind=engine) # 實例和engine綁定
self.session = self.session_class() # 生成session實例,相當於游標
# 創建表
def create_user(self):
Base.metadata.create_all(engine) # 創建表結構 (這里是父類調子類)
# 新增數據
def insert_user(self, user):
self.session.add(use) # 把要創建的數據對象添加到這個session里, 一會統一創建
return self.session.commit() # 現此才統一提交,創建數據
# 根據一個字段查詢
def sel_user(self):
my_user = self.session.query(User).filter_by(name="12").first() # 查詢
return my_user
'''
---------------- 條件查詢 ----------------
my_user1 = self.session.query(User).filter(User.id > 2).all()
my_user2 = self.session.query(User).filter_by(id=27).all() # filter_by相等用‘=’
my_user3 = self.session.query(User).filter(User.id == 27).all() # filter相等用‘==’
---------------- 多條件查詢 ----------------
objs = self.session.query(User).filter(User.id>0).filter(User.id<7).all()
-------------- 模糊查詢,返回count ------------
self.session.query(User).filter(User.name.like("f%")).count() # mysql不區分大小寫
---------------- 分組查詢 ----------------
self.session.query(User.name,func.count(User.name)).group_by(User.name).all()
---------------- 連表查詢 ----------------
ret = self.session.query(Users, Favor).filter(Users.id == Favor.nid).all()
# 以下兩種 必須表之間有外鍵關聯才能查
ret = session.query(Person).join(Favor).all()
ret = session.query(Person).join(Favor, isouter=True).all()
'''
# 查詢所有
def sel_user_all(self):
return self.session.query(User).all()
# return self.session.query(User.id,User.name).all() #查詢所有,結果集只包含 id,name
# 修改操作
def up_user(self):
my_user = self.session.query(User).filter_by(name="fgf").first()
my_user.name = "fenggf" # 查詢出來之后直接賦值修改
my_user.passwork = "123qwe"
self.session.commit()
if __name__ == '__main__':
use = User()
user_list = use.sel_user_all()
for us in user_list:
print us.name