sqlalchemy 从零到一的使用流程(python+sqlite)
1.安装环境
pip install SQLAlchemy
2.使用orm方式创建表格
`from sqlalchemy import MetaData
from sqlalchemy import Table
from sqlalchemy import Column
from sqlalchemy import Integer
from sqlalchemy import String
from sqlalchemy import create_engine
`
2.1 初始化数据库
echo参数为True时,会显示每条执行的SQL语句,可以关闭,
create_engine()返回一个Engine的实例,并且它表示通过数据库语法处理细节的核心接口,在这种情况下,数据库语法将会被解释成python的类方法。
`
from sqlalchemy import create_engine
engine = create_engine('sqlite:///mydb.sqlite', echo=True)
`
mysql 的连接示例: engine = create_engine('mysql://fxq:123456@192.168.100.101/sqlalchemy', echo=True)
解释说明:
mysql://fxq:123456@192.168.100.101/sqlalchemy
mysql: 指定是哪种数据库连接
第一个fxq: 用户名
123456: fxq用户对应的密码
192.168.100.101: 数据库的ip
sqlalchemy: 数据库需要连接库的名字
2.2 创建表格
`
from sqlalchemy import create_engine, MetaData, Table, Column, Integer, String
engine = create_engine('mysql+pymysql://fxq:123456@192.168.100.101/sqlalchemy')
metadata = MetaData(engine)
student = Table('student', metadata,
Column('id', Integer, primary_key=True),
Column('name', String(50), ),
Column('age', Integer),
Column('address', String(10)),
)
metadata.create_all(engine)
`
MetaData类主要用于保存表结构,连接字符串等数据,是一个多表共享的对象
metadata = MetaData(engine) #绑定一个数据源的metadata
metadata.create_all(engine) #是来创建表,这个操作是安全的操作,会先判断表是否存在。
2.3 运行python文件在对应数据库中生成表
3 操作数据库的增删改查
3.1 创建回话
`
from sqlalchemy.orm import sessionmaker
DBSession = sessionmaker(bind=engine)
session = DBSession()
`
3.2 使用回话 增删改查
add示例
student1 = Student(id=1001, name='ling', age=25, address="beijing")
student2 = Student(id=1002, name='molin', age=18, address="jiangxi")
student3 = Student(id=1003, name='karl', age=16, address="suzhou")
session.add_all([student1, student2, student3])
session.commit()
session.close()
**查询示例 **
my_stdent = session.query(Student).filter_by(name="fengxiaoqing2").first()
print(my_stdent)
print(my_stdent.id,my_stdent.name,my_stdent.age,my_stdent.address)
更新操作示例
my_stdent = session.query(Student).filter(Student.id == 1002).first()
my_stdent.name = "fengxiaoqing"
my_stdent.address = "chengde"
session.commit()
student1 = session.query(Student).filter(Student.id == 1002).first()
print(student1.name, student1.address)
删除示例
session.query(Student).filter(Student.id == 1001).delete()
session.commit()
session.close()
其他函数应用示例 统计、分组、排序
统计name中包含‘feng’的数量
session.query(Student).filter(Student.name.like("%feng%")).count()
按照age分组
std_group_by = session.query(Student).group_by(Student.age)
按照id desc(倒序)排列
std_ord_desc = session.query(Student).filter(Student.name.like("%feng%")).order_by(Student.id.desc()).all()
4.参考博客
作者:俊采星驰_87e0
链接:https://www.jianshu.com/p/0ad18fdd7eed
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。