2024-05-28 15:15

Python的sqlalchemy库处理数据库

码自答

Python

(367)

(0)

收藏

处理数据库数据,通过sql语句完成。

sqlalchemy库,提供了丰富的处理数据库的方法,不需要写sql语句,sqlalchemy库的方法会自动生成sql语句。

本文以MySQL数据库为例。

  • 添加模块

    需要两个模块   sqlalchemy  和 pymysql

    image.png

  • 创建表

    创建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);

    image.png

  • 添加数据

    Table类的insert()方法,根据Table对象的属性,自动生成insert语句


    image.png


  • 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条评论

点击登录参与评论