本文介紹
sqlalchemy
在python
中的使用,不涉及到flask
或者tornado
框架,需要的時候融入到框架專案中即可。
一、依賴包的安裝
-
1、安裝
sqlalchemy
pip3 install sqlalchemy複製程式碼
-
2、安裝
pymysql
pip3 install pymysql複製程式碼
二、建立連線(使用python
程式碼連線到mysql
)
-
1、新建資料庫
mysql>
create database sqlalchemy_data charset=utf8;
複製程式碼 -
2、新建一個檔案
connect.py
-
3、導包及資料庫的基本資訊
from sqlalchemy import create_engineHOSTNAME = '127.0.0.1'PORT = '3306'DATABASE = 'sqlalchemy_data'USERNAME = 'root'PASSWORD = 'root'複製程式碼
-
4、使用
pymysql
建立連線的db_url
db_url = 'mysql+pymysql://{username
}:{password
}@{hostname
}:{port
}/{database
}?charset=utf8'.format( username=USERNAME, password=PASSWORD, hostname=HOSTNAME, port=PORT, database=DATABASE)複製程式碼 -
5、建立一個引擎
# 建立引擎engine = create_engine(db_url)複製程式碼
-
6、測試連線是否成功
if __name__ == "__main__": connection = engine.connect() result = connection.execute('select 1') print(result.fetchone())複製程式碼
-
7、完整程式碼
from sqlalchemy import create_engineHOSTNAME = '127.0.0.1'PORT = '3306'DATABASE = 'sqlalchemy_data'USERNAME = 'root'PASSWORD = 'jianshuihen128'db_url = 'mysql+pymysql://{username
}:{password
}@{hostname
}:{port
}/{database
}?charset=utf8'.format( username=USERNAME, password=PASSWORD, hostname=HOSTNAME, port=PORT, database=DATABASE)# 建立引擎engine = create_engine(db_url)if __name__ == "__main__": connection = engine.connect() result = connection.execute('select 1') print(result.fetchone())複製程式碼
三、使用sqlalchemy
建立資料表
-
1、建立一個
modules
的檔案,存放資料模型 -
2、在
connect.py
檔案中新增連線的session
與declarative_base
from sqlalchemy.ext.declarative import declarative_basefrom sqlalchemy.orm import sessionmaker# sessionmaker生成一個session類Session = sessionmaker(bind=engine)dbSession = Session()Base = declarative_base(engine)複製程式碼
-
3、在
modules
包下建立一個user_module.py
的檔案import datetimefrom uuid import uuid4from sqlalchemy import Column, Integer, String, DateTime, Booleanfrom sqlalchemy_demo.connect import Baseclass UserModule(Base): """ 建立一個使用者的資料模型 """ __tablename__ = 'user' uuid = Column(String(36), unique=True, nullable=False, default=lambda: str(uuid4()), comment='uuid') id = Column(Integer, primary_key=True, autoincrement=True, comment='使用者id') user_name = Column(String(30), nullable=False, unique=True, comment='使用者名稱') password = Column(String(64), nullable=False, comment='使用者密碼') createtime = Column(DateTime, default=datetime.datetime.now, comment='建立時間') updatetime = Column(DateTime, default=datetime.datetime.now, comment='修改時間') is_lock = Column(Boolean, default=False, nullable=False, comment='是否鎖住使用者') def __repr__(self): return 'User(uuid={uuid
}, id={id
}, user_name={user_name
}, password={password
}, createtime={createtime
}, updatetime={updatetime
}, is_lock={is_lock
})'.format( uuid=self.uuid, id=self.id, user_name=self.user_name, password=self.password, createtime=self.createtime, updatetime=self.updatetime, is_lock=self.is_lock)複製程式碼 -
4、運動程式碼建立資料表(
user_module.py
檔案下)if __name__ == "__main__": Base.metadata.create_all()複製程式碼
-
5、檢視資料表資訊
mysql>
desc user;
+------------+-------------+------+-----+---------+----------------+| Field | Type | Null | Key | Default | Extra |+------------+-------------+------+-----+---------+----------------+| uuid | varchar(36) | NO | UNI | NULL | || id | int(11) | NO | PRI | NULL | auto_increment || user_name | varchar(30) | NO | UNI | NULL | || password | varchar(64) | NO | | NULL | || createtime | datetime | YES | | NULL | || updatetime | datetime | YES | | NULL | || is_lock | tinyint(1) | NO | | NULL | |+------------+-------------+------+-----+---------+----------------+7 rows in set (0.01 sec)mysql>
複製程式碼
四、對資料表簡單的增刪改查
-
1、單獨建立一個
test_user.py
的測試檔案 -
2、確保前面在
connect.py
檔案中新增的from sqlalchemy.orm import sessionmaker# sessionmaker生成一個session類Session = sessionmaker(bind=engine)dbSession = Session()複製程式碼
-
3、新增單條資料
from sqlalchemy_demo.connect import dbSessionfrom sqlalchemy_demo.modules.user_module import UserModuledef add_user(): row = UserModule(user_name='張三', password='123') dbSession.add(row) dbSession.commit()if __name__ == "__main__": add_user()複製程式碼
-
4、同時新增多條資料
from sqlalchemy_demo.connect import dbSessionfrom sqlalchemy_demo.modules.user_module import UserModuledef add_user(): dbSession.add_all([ UserModule(user_name='王五', password='123'), UserModule(user_name='馬六', password='123'), UserModule(user_name='趙五', password='123'), ]) dbSession.commit()if __name__ == "__main__": add_user()複製程式碼
-
5、查詢資料
...def query_user(): rows = dbSession.query(UserModule).all() print(rows)...複製程式碼
-
6、修改資料
...def update_user(): row = dbSession.query(UserModule).filter(UserModule.id == 1).update({UserModule.password: '234'
}) print(row) dbSession.commit()...複製程式碼 -
7、刪除資料
...def delete_user(): row = dbSession.query(UserModule).filter(UserModule.id == 3)[0] print(row) dbSession.delete(row) dbSession.commit()...複製程式碼