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()