一.python連接mysql
from sqlalchemy import create_engine # 數據庫數據 HOSTNAME = '127.0.0.1' # linux本地 PORT = '3306' DATABASE = 'mydb' USERNAME = 'admin' PASSWORD = 'Root110qwe' # 數據連接url db_url = 'mysql+pymysql://{}:{}@{}:{}/{}?charset=utf8'.format( USERNAME, PASSWORD, HOSTNAME, PORT, DATABASE ) # 連接到mysql需要用到pymysql engine = create_engine(db_url) # 鏈接數據庫 # 建表需要 創建Modle的 Base類 from sqlalchemy.ext.declarative import declarative_base Base = declarative_base(engine) # 處理表的數據需要 創建會話 from sqlalchemy.orm import sessionmaker Session = sessionmaker(engine) session = Session() # 測試連接 if __name__ == '__main__': connection = engine.connect() result = connection.execute('select 1') print(result.fetchone())
二.建表 需要 在連接時創建一個Base類
# 創建Modle的Base類u from sqlalchemy.ext.declarative import declarative_base Base = declarative_base(engine)
三.建表
通過python的 類 建表,這個類需要繼承Base類 (依靠Base類將表和python的類連接起來)
* 需要繼承Base類
from datetime import datetime from sqlalchemy import Column,Integer,String,DateTime from connect import Base # 把數據庫的表映射成python的類(繼承Base類) 用python中的類(繼承Base類)來表示mysql的表 class User(Base): __tablename__ = 'user' id = Column(Integer,primary_key=True,autoincrement=True) username = Column(String(20),nullable=False) password = Column(String(50)) creatime = Column(DateTime,default=datetime.now()) def __repr__(self): # 重寫repr方法 return "<User(id=%s,username=%s,password=%s,createtime=%s)>" %( self.id, self.username, self.password, self.creatime ) if __name__ == '__main__': Base.metadata.create_all()
四.給建的表添加屬性(增刪改查)
* 需要創建會話
# 處理表的數據需要 在連接時 創建會話 from sqlalchemy.orm import sessionmaker Session = sessionmaker(engine) session = Session()
————————————————————————————————————————————————————————————————————————————————————
增加屬性:
from connect import session from user_module import User # 增加函數 def add_user(): person = User(username='budong',password='qwe123') session.add(person) # 添加單條數據 session.add_all( # 添加多條數據 [ User(username='tj',password='123qwe1'), User(username='tj1',password='123qwe2'), User(username='tj2',password='123qwe3') ] ) session.commit() # 處理數據必須提交事務 增加的屬性結果
+----+----------+----------+---------------------+
| id | username | password | creatime |
+----+----------+----------+---------------------+
| 1 | budong | qwe123 | 2018-03-03 15:46:31 |
| 2 | tj | 123qwe1 | 2018-03-03 15:46:31 |
| 3 | tj1 | 123qwe2 | 2018-03-03 15:46:31 |
| 4 | tj2 | 123qwe3 | 2018-03-03 15:46:31 |
+----+----------+----------+---------------------+
def search_user(): rows = session.query(User).all() # all所有的數據 .first() 查詢第一條數據 print(rows) # 這兒打印的是repr,所以需要在建表的時候重寫repr方法
查詢的數據結果
[<User(id=1,username=budong,password=qwe123,createtime=2018-03-03 16:14:35)>, <User(id=2,username=tj,password=123qwe1,createtime=2018-03-03 16:14:35)>, <User(id=3,username=tj1,password=123qwe2,createtime=2018-03-03 16:14:35)>, <User(id=4,username=tj2,password=123qwe3,createtime=2018-03-03 16:14:35)>]
def update_user(): session.query(User).filter(User.username=='tj1').update({User.password:'88888',User.username:'haha'}) session.commit()
修改的數據結果 --修改了tj1 = haha,password=88888
+----+----------+----------+---------------------+
| id | username | password | creatime |
+----+----------+----------+---------------------+
| 1 | budong | qwe123 | 2018-03-03 16:14:35 |
| 2 | tj | 123qwe1 | 2018-03-03 16:14:35 |
| 3 | haha | 88888 | 2018-03-03 16:14:35 |
| 4 | tj2 | 123qwe3 | 2018-03-03 16:14:35 |
+----+----------+----------+---------------------+
a
def delete_user(): row =session.query(User).filter(User.id==1)[0] # 相當於 .first() session.delete(row) session.commit()
刪除數據的結果 --刪除了第一條數據
+----+----------+----------+---------------------+
| id | username | password | creatime |
+----+----------+----------+---------------------+
| 2 | tj | 123qwe1 | 2018-03-03 16:14:35 |
| 3 | haha | 88888 | 2018-03-03 16:14:35 |
| 4 | tj2 | 123qwe3 | 2018-03-03 16:14:35 |
+----+----------+----------+---------------------+
if __name__ == '__main__': add_user() search_user() pdate_user() delete_user()