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()
原文地址:https://www.cnblogs.com/effortsing/p/10406942.html