SQLAlchemy介绍和基本使用
链接数据库
创建表
只能取一行数据
from sqlalchemy import create_engine
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy import Column,Integer,String
from sqlalchemy import create_engine
# 链接数据库
# 地址 数据库名字 端口 用户名 密码
# 地址
HOSTNAME = '127.0.0.1'
# 数据库
DATABASE = 'class1'
# 端口
PORT = 3306
# 用户名
USERNAME = 'brkalsy'
# 密码
PASSWORD = 'root123'
# 创建url,传参 用户名 密码 主机地址 端口(默认3306) 数据库名字
DB_URL = 'mysql+pymysql://{}:{}@{}:{}/{}'.format(USERNAME, PASSWORD, HOSTNAME, PORT, DATABASE)
# 访问
engin = create_engine(DB_URL)
# 创建链接
with engin.connect() as conn:
res = conn.execute('select * from class')
print(res.fetchone())
SQLAlchemy-ORM介绍
from sqlalchemy import create_engine
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy import Column, Integer, String
# 链接数据库
# 地址 数据库名字 端口 用户名 密码
# 地址
HOSTNAME = '127.0.0.1'
# 数据库
DATABASE = 'class1'
# 端口
PORT = 3306
# 用户名
USERNAME = 'brkalsy'
# 密码
PASSWORD = 'root23'
# 创建url,传参
DB_URL = 'mysql+pymysql://{}:{}@{}:{}/{}'.format(USERNAME, PASSWORD, HOSTNAME, PORT, DATABASE)
# 访问
engin = create_engine(DB_URL)
# 创建Base基类
Base =declarative_base(engin)
# 创建表(字段)需要导入Colum: from sqlalchemy import Column, Integer, String
顺带公共一直1045错误,查了很久,发现密码少了一位quq这里附赠解决方案:
语法:Base =declative_base(DB_URL的名字),class定义类及tablename创建表和数据,然后Bae.metadata.create_all()
# 定义类相当于定义表格
class Students(Base):
# 给表格取名字 双下划线tablename __tablename__
__tablename__ = 'students'
# 创建字段 数据类型约束 主键 自增长
# 一个表只能有一个逐渐,主键通常是id
# Colum()是指实例化传参
id = Column(Integer, primary_key=True, autoincrement=True)
# nullable是是否为空,这里是string到mysql会自动转换成varchar
name = Column(String(50), nullable=False)
# 性别应该为枚举enum 默认为1,comment为’....‘
gender = Column(Integer, default=1, comment='1为男,2为女')
# 生成表格要映射
# 模型(class的内容就是模型)映射到数据库:Base.matadata.create_all()
Base.metadata.create_all()
增加操作
创建新的表格
但是数据库还没有数据——没有提交事务,需要导入模块——from sqlalchemy.orm import sessionmaker
from sqlalchemy import create_engine
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy import Column,Integer,String
from sqlalchemy import create_engine
from sqlalchemy.orm import sessionmaker
from sqlalchemy.dialects.mysql import LONGTEXT
需要创建一个实例后再对实例实例化
Sesion=sessionmaker(bind=‘绑定数据库的名字’)
session =Session()再实例化一次
session.add()单个数据 session.add_all([])多个数据以add_all列表形式
最后要session.commit()才算提交成功
提交多个数据
记得创建了Base.metadata.create_all()之后要注释,不然会一直重新创建表
增加数据
查——最重要
运行发现是列表,所以for循环遍历
点上字段名才会有结果
太麻烦,可以从class里面定义str方法
使用filter过滤按照条件查询——ssession.query(类名).filter(类名.名==‘’).all()
使用filte_by查询
只查询第一条数据——不需要循环
get()方式查询
改——直接改
删
删除的回滚操作——rollback
String、text、longtext
复习