SQLAlchemy 是 python 中常用的 ORM 框架
ORM全称 Object Relational Mapping对象关系映射
通过 ORM 可以不用关心后台是使用的哪种数据库,只需要按照 ORM 所提供的语法规则去书写相应的代码, ORM 就会自动的转换成对应对应数据库的 SQL 语句
- SQLAlchemy连接数据库
第一步:安装
安装: mysql
安装python包: pymysql、sqlalchemy
pip安装 python 包
pip install -i https://pypi.douban.com/simple pymysql
pip install -i https://pypi.douban.com/simple sqlalchemy
这里是使用国内的源 - 第二步:导入模块、建立数据库模块、数据库 URL、连接数据库、测试连接是否OK
from sqlalchemy import create_engine
- 第三步:数据库连接
connect.py
#导入create_engine 的模块
from sqlalchemy import create_engine
#数据库模块
HOSTNAME = '127.0.0.1'
PORT = '3306' #注意这个不是本地端口是指远程数据库端口,因为pycharm已经先SSH连接到本地了
DATABASE = 'mydb' #linux已经存在的database,没有的话自己创建
USERNAME = 'admin'
PASSWORD = 'Root110qwe'
#数据连接 URL
Db_Uri = 'mysql+pymysql://{}:{}@{}/{}?charset=utf8'.format(
USERNAME,
PASSWORD,
HOSTNAME,
DATABASE,
)
#连接数据库
engine = create_engine(Db_Uri)
#创建一个基类
from sqlalchemy.ext.declarative import declarative_base
Base = declarative_base(engine)
#创建会话
from sqlalchemy.orm import sessionmaker
Session = sessionmaker(engine)
session = Session()
#测试连接是否OK
if __name__=="__main__":
conection = engine.connect()
result = conection.execute('select 1')
print(result.fetchone())
- 刚才已经使用 SQLAlchemy 连上数据库,现在该如何在数据库里面新建表呢?
- 第一步:创建 Module 的 Base 类,上面已经创建了基类
#创建一个基类
from sqlalchemy.ext.declarative import declarative_base
Base = declarative_base(engine)
对象关系型映射,数据库中的表与python中的类相对应,创建的类必须继承自 sqlalchemy 中的基类。
使用 declarative 方法定义的映射类依据一个基类,这个基类是维系类和数据表关系的目录。
应用通常只需要有一个 Base 的实例。我们通过 declarative_base() 功能创建一个基类。
- 第二步:创建 Module
user_modules.py
from datetime import datetime
from sqlalchemy import Column, Integer, String, DateTime, Boolean
from data.connect import Base
#通过 SQLAlchemy 提供的语法来声明User表,为了测试我修改为test表
class User(Base):
__tablename__ = 'test'
id = Column(Integer,primary_key=True,autoincrement=True)
username = Column(String(20),nullable=False)
password = Column(String(50))
creatime = Column(DateTime,default=datetime.now)
# _locked = Column(Boolean, default=False, nullable=False)
# __tablename__: 数据库中的表名
# Column: 用来创建表中的字段的一个方法
# Integer: 整形,映射到数据库中的int类型
# String: 字符类型,映射到数据库中的varchar类型,使用时,需要提供一个字符长度
# DateTime: 时间类型
def __repr__(self):
return """
<User(id:%s, username:%s, password:%s, creatime:%s)>
""" % (
self.id,
self.username,
self.password,
self.creatime
)
if __name__ =="__main__":
#执行此代码,就会把创建好的 Module 映射到数据库中
Base.metadata.create_all()
再次强调,我们用类来表示数据库里面的表!!!
这些表的类都继承于我们的Base基类。
在类里面我们定义一些属性,这个属性通过映射,就对应表里面的字段
增删改查
现在万事具备,只需要往表中进行数据的更改即可,那改如何操作呢?第一步:创建会话
在对表数据进行增删改查之前,先需要建立会话,建立会话之后才能进行操作,就类似于文件要打开之后才能对文件内容操作
在上面的connect.py我事先创建好了
#创建会话
from sqlalchemy.orm import sessionmaker
Session = sessionmaker(engine)
session = Session()
- 创建test_modules.py实现增删改查方法
from data.connect import session
from data.user_modules import User
def add_user():
# person = User(username='test1',password ='qwe123')
# session.add(person) #add 是添加一条数据, add_all 添加多条数据
persons = [
User(username='tuple', password='qwe123'),
User(username='list', password='qwe123'),
User(username='os', password='qwe123'),
]
session.add_all(persons) # add_all 添加多条数据
session.commit()
def search_user():
# rows = session.query(User).all()
rows = session.query(User).first()
print(rows)
def updata_user():
rows = session.query(User).filter(User.username == 'os').update({User.password: 1})
session.commit()
def delect_user():
rows = session.query(User).filter(User.username == 'list')[0]
print(rows)
session.delete(rows)
session.commit()
if __name__ =='__main__':
# add_user()
search_user()
updata_user()
delect_user()
query 就是查询的意思,在 SQLAlchemy 中也用来查询数据
all 是查询所有的意思
first 是查询第一条数据
看完之后需要掌握下面的操作
ORM 概念、连接 数据库、创建 Module、创建会话基本的增删改查
PS:
注意:想要from connect import Base不报错(报错时是可以运行代码的) 在data文件夹里面右键 选中Mark directory as 选中sources root