处理数据库数据,通过sql语句完成。
sqlalchemy库,提供了丰富的处理数据库的方法,不需要写sql语句,sqlalchemy库的方法会自动生成sql语句。
本文以MySQL数据库为例。
添加模块
需要两个模块 sqlalchemy 和 pymysql
创建表
创建Table对象,对象的属性就是表的列。
from sqlalchemy import * engine = create_engine("mysql+pymysql://数据库用户名:数据库密码@localhost/test"); #链接数据库 test是数据库名 metaData = MetaData() #创建Table对象 student = Table('student',metaData, Column('id',Integer(),primary_key=True,autoincrement=True), Column('name',String(20),nullable=False), Column("age",Integer(),nullable=True), Column("sex",String(2),default="男") ); #创建表 metaData.create_all(engine);
添加数据
Table类的insert()方法,根据Table对象的属性,自动生成insert语句
from sqlalchemy import * engine = create_engine("mysql+pymysql://root:wanmait@localhost/test"); connect = engine.connect(); #连接数据库 metaData = MetaData(); #表 student = Table('student',metaData, Column('id',Integer(),primary_key=True,autoincrement=True), Column('name',String(20),nullable=False), Column("age",Integer(),nullable=True), Column("sex",String(2),default="男") ); #生成sql语句 student_insert = student.insert(); #数据列表 student_values = [{"name":"sanmao","age":20,"sex":"男"}, {"name":"simao","age":25,"sex":"女"}]; #执行sql语句 connect.execute(student_insert,student_values); connect.commit(); #关闭链接 connect.close(); engine.dispose();
修改数据
先从数据库查询需要修改的那行的数据,查询结果为对象,修改对象某个属性的值,然后提交,更新数据库的数据。
engine = create_engine("mysql+pymysql://root:wanmait@localhost/test"); #连接数据库 Base = declarative_base(); metadata = Base.metadata; metadata.bind = engine; #表 class student(Base): __table__ = Table('student',metadata,autoload_with=engine); Session = sessionmaker(bind=engine); session = Session(); #创建session对象 stu = session.query(student).filter(student.id==12).first(); #查询数据 stu.name = 'wanmait'; #修改数据 session.commit(); #提交 #关闭链接 engine.dispose();
删除数据
跟修改的思路一致,先查询需要删除的那行数据,再调用delete方法()删除
from sqlalchemy import * from sqlalchemy.orm import sessionmaker from sqlalchemy.ext.declarative import declarative_base engine = create_engine("mysql+pymysql://root:wanmait@localhost/test"); #连接数据库 Base = declarative_base(); metadata = Base.metadata; metadata.bind = engine; #表 class student(Base): __table__ = Table('student',metadata,autoload_with=engine); #根据数据库的表 自动映射生成类 Session = sessionmaker(bind=engine); session = Session(); #创建session对象 stu = session.query(student).filter(student.id==12).first(); #查询数据 session.delete(stu); #删除数据 session.commit(); #提交 #关闭链接 engine.dispose();
查询数据
query()方法生成sql语句,filter()方法为sql语句添加查询条件。
engine = create_engine("mysql+pymysql://root:wanmait@localhost/test"); connect = engine.connect(); #连接数据库 metaData = MetaData(); #表 student = Table('student',metaData, Column('id',Integer(),primary_key=True,autoincrement=True), Column('name',String(20),nullable=False), Column("age",Integer(),nullable=True), Column("sex",String(2),default="男") ); Session = sessionmaker(bind=engine); session = Session(); #创建session对象 #query = session.query(student); #查询所有数据 query = session.query(student).filter(student.columns.age>20).filter(student.columns.name.like("%s%")); #条件查询 for student in query.all(): print(student.name); #分析结果集 #关闭链接 connect.close(); engine.dispose();
0条评论
点击登录参与评论