zoukankan      html  css  js  c++  java
  • python操作mysql实例

    python操作mysql实例
    使用ORM模型
    SQLAlchemy模式
    首先安装所需模块
    pip install SQLAlchemy
    pip install pymysql
    本实例使用了名为test的数据库,所以在运行本例之前,要确保test数据库已经存在
    
    2、完整增、删、改、查 实例
    from sqlalchemy import create_engine,MetaData,Table,Column,Integer,String,Float,exc,orm
    from sqlalchemy.ext.declarative import declarative_base
    #定义用于mysql连接字符串,通过pymysql指定sqlalchemy底层用的pymysql模块
    #操作mysql,root是用户名,jenkins@123是密码db5是数据库名
    mysql='mysql+pymysql://root:jenkins@123@192.168.0.93:3306/tb5?charset=utf8'
    #定义要操作的表名
    tableName='tb5'
    #创建数据库引擎(sqlalchemy.engine.base.Engine 对象)
    engine=create_engine(mysql,encoding='utf-8')
    #开始连接数据库
    engine.connect()
    #创建MetaData对象
    metadata=MetaData(engine)
    #创建用于定义表元数据的Table对象,该表一共5个字段,字段id是主键
    person=Table(tableName,metadata,
        Column('id',Integer,primary_key=True),
        Column('name',String(30)),                  #长度30的字符串类型
        Column('age',Integer),
        Column('address',String(100)),              #长度为100的字符串类型
        Column('salary',Float))
    #创建表
    metadata.create_all(engine)
    Base=declarative_base()
    #定义与tb1表对应的Person类
    class Person(Base):
        #指定表名
        __tablename__=tableName
        id=Column(Integer,primary_key=True)
        name=Column(String(30))
        age=Column(Integer)
        address=Column(String(100))
        salary=Column(Float)
    Session=orm.sessionmaker(bind=engine)
    # 创建会话(Session)
    session=Session()
    #(增)
    #先删除person1表中所有的记录,以免在插入记录时造成主键冲突
    session.query(Person).delete()
    #提交后对数据库的修改才生效
    session.commit()
    # 下面创建3个Person对象
    person1=Person(id=10,name='Bill',age=30,address='地球',salary='1111')
    person2=Person(id=20,name='Mike',age=40,address='火星',salary='2222')
    person3=Person(id=30,name='John',age=50,address='月球',salary='3333')
    # 下面向tb1表中插入3条记录
    session.add(person1)
    session.add(person2)
    session.add(person3)
    #提交后对数据库的修改才生效
    session.commit()
    print("成功插入记录")
    #(改)
    #先查询name=Mike的记录,然后将所有记录的address字段替换成“千星之城”
    session.query(Person).filter(Person.name == 'Mike').update({'address': '千星之城'})
    #提交修改
    session.commit()
    #(查+改)
    #查询所有name等于John的记录
    query=session.query(Person).filter(Person.name == 'John')
    #输出了用于查询的SQL语句(由SQLAlchemy字段生成)
    print(query)
    #将查新的结果集转为单一的对象(Person对象),使用scalar方法时必须要保证查询结果集只有一条记录,
    person=query.scalar()
    #修改person对象的属性值
    person.age=12
    person.salary=5000
    #提交修改
    session.commit()
    print('成功更新了记录')
    #使用组合条件查询tb1表中的记录
    persons=session.query(Person).filter((Person.age>=10) & (Person.salary>=2000))
    #通过对查询结果进行迭代,输出所有查询结果,
    for person in persons:
        print('name','=',person.name,end=' ')
        print('age','=',person.age,end=' ')
        print('salary','=',person.salary,end=' ')
    #输出查询结果中的第1条记录的name字段值
    print(persons.first().name)              #试过不管用
    #输出查询结果中第2条记录的name字段值
    print(persons.offset(1).scalar().name)   #一共2行记录,查询最后一行记录。3行记录就报错,1行记录也报错
    #(删)
    #删除person2对象的记录
    session.delete(person2)
    session.commit()
    #关闭session
    session.close()
  • 相关阅读:
    Appium脚本(2):元素检测
    查看appPackage和appActivity的多种方法
    让织梦内容页arclist标签的当前文章标题加亮显示
    dedecms wap 上一篇 下一篇 链接出错
    织梦开启二级域名(多站点)内容页图片无法显示的解决方法
    多级分类标签{dede:channelartlist}实现当前栏目颜色高亮显示
    织梦channelartlist标签当前栏目高亮
    dedecms模板中 if else怎么写
    dedecms调用子栏目及文章列表
    Dedecms判断当前栏目下是否有子栏目
  • 原文地址:https://www.cnblogs.com/effortsing/p/10406942.html
Copyright © 2011-2022 走看看