#!/usr/bin/env python
# -*- coding: utf-8 -*-
from sqlalchemy import Column, String, create_engine, Integer, Date, Float, ForeignKey
from sqlalchemy.orm import sessionmaker, relationship
from sqlalchemy.ext.declarative import declarative_base
#######################################################################################################
##############初始化資料庫連接配接,傳回session
#######################################################################################################
def get_session():
# 初始化資料庫連接配接 # '資料庫類型+資料庫驅動名稱://使用者名:密碼@機器位址:端口号/資料庫名'
engine = create_engine('mysql+pymysql://root:[email protected]:9000/mysqldb?charset=utf8')
DBSession = sessionmaker(bind=engine) # 建立DBSession類型
session = DBSession()
return session
#######################################################################################################
##############表格對象建立
#######################################################################################################
###建立對象的基類:
Base = declarative_base()
###定義Asset表對象
class Asset(Base):
# 表的名字:
__tablename__ = 'hr_asset'
# 表的結構:
id = Column(Integer, primary_key=True)
assetnum = Column(String(50))
assetname = Column(String(50))
assetmodel = Column(String(50))
assettype = Column(Integer)
assetstate = Column(Integer)
usepersonid = Column(Integer, ForeignKey("hr_user.id"))
userperson = relationship("User",backref="asset", uselist=False)
####定義User表對象
class User(Base):
# 表的名字:
__tablename__ = 'hr_user'
# 表的結構:
id = Column(Integer, primary_key=True)
username = Column(String(50))
age = Column(Integer)
degree = Column(String(50))
#######################################################################################################
##############資料操作模闆
########################################################################################################
####INSERT插入資料 模闆
if __name__ == "__main__":
try:
# 建立session對象
session1 = get_session()
# 建立新表格對象
new_user = User(username='龍九', age=33, degree="大學")
# 添加到session
session1 .add(new_user)
# 送出即儲存到資料庫
session1 .commit()
# 得到新資料id
the_id=new_user.id
# 關閉session
session1 .close()
except:
pass
####DELETE删除資料 模闆
if __name__ == "__main__":
try:
session2 = get_session()
session2.query(User).filter(User.id == '3').delete()
session2.commit()
session2.close()
except:
pass
####UPDATE更新資料 模闆
if __name__ == "__main__": #模闆1
try:
session3 = get_session()
session3.query(User).filter(User.id == '2').update({User.degree: '高中'}, synchronize_session=False)
session3.commit()
session3.close()
except:
pass
if __name__ == "__main__": #模闆2
try:
session3 = get_session()
the_user = session3.query(User).get(2) #參數為主鍵id
the_user.username ="小王"
the_user.age= 40
the_user.degree ="博士"
session3.commit()
session3.close()
except:
pass
####SELECT查詢資料之單條資料 模闆
if __name__ == "__main__":
try:
session4 = get_session()
user = session4.query(User).filter(User.id == 3).one() #注:這裡用one()
print('type:', type(user))
print('name:', user.username)
session4.close()
except:
pass
####SELECT查詢資料之多條資料 模闆
if __name__ == "__main__":
try:
session5 = get_session()
users = session5.query(User).filter(User.id > 0).all() #注:這裡用all()
for i in range(len(users)):
print(users[i].id)
print(users[i].username)
session5.close()
except:
pass
####SELECT查詢資料之連表查詢 模闆
if __name__ == "__main__":
try:
session6 = get_session()
assets = session6.query(Asset).join(User).filter(User.id > 0).all()
for i in range(len(assets)):
pass
session6.close()
except:
pass