Python通过ORM操作mysql数据库

本文介绍了如何使用Python的SQLAlchemy库连接MySQL数据库,包括创建表、基础的增删改查操作,并演示了如何使用Alembic进行数据库迁移,修改表结构。
摘要由CSDN通过智能技术生成

Python操作mysql

  1. 连接数据库
from sqlalchemy import create_engine
engine = create_engine("mysql+pymysql://username:password@ip/数据库名称?charset=utf8")
# 示例,连接本地mysql中的spider库
# engine = create_engine("mysql+pymysql://root:000000@localhost/spider?charset=utf8")
  1. 创建表
from sqlalchemy.orm import declarative_base              # 创建base类,其他类继承自该类就可以创建表
from sqlalchemy import Column,String,Integer            # Column 字段名 String和Integer是类型

Base = declarative_base()

class Person(Base):
    __tablename__ = "person"
    id = Column(Integer, primary_key=True, autoincrement=True) # primary_key表示主键 autoincrement表示自增长
    name = Column(String(32), unique=True)
    gender = Column(String(32))   
# 这么调用会创建表(下面的create_all只需要执行一次,以后就不需要执行了)
Base.metadata.create_all(engine)
  1. 增、删、改、查
from sqlalchemy.orm import sessionmaker

# ORM操作
Session = sessionmaker(bind = engine)
session = Session()

##########增##########
# 添加一个对象
single_person = Person(name="李雷", gender="男")
session.add(single_person)

# 添加多个对象
session.add_all([
    Person(name="Lily", gender="女"),
    Person(name="Lucy", gender="女")
])

##########删##########
# 删除指定id的人
session.query(Person).filter(Person.id==1).delete()

##########改##########
# 修改操作
modify_person = session.query(Person).filter(Person.name=="Lucy")
if modify_person .count() > 0:
	per = modify_person[0]
	per.name = 'Lilei'
	per.gender = '男'

##########查##########
# 查询id大于0的人
find_person = session.query(Person).filter(Person.id>0)
for p in find_person:
	print(p.id, p.name, p.gender)

# 指定字段查询
find_person = session.query(Person.name, Person.gender).filter(Person.id==1)
print(find_person[0].gender)

# 根据名字查询
find_person = session.query(Person).filter_by(name='Lily')
for p in find_person :
    print(p.id, p.name, p.gender)
    
session.commit()
session.close()

修改表字段(非常重要,调研了好久)

  1. 下载alembic
pip install alembic
  1. 在创建表的python文件目录下执行
alembic init alembic

执行完这条命令之后,会在执行的目录下,生成一个alembic文件夹和alembic.ini文件

  1. 修改env.py(最重要)
    env.py是执行上面一条命令自动生成在alembic文件夹下的文件
    修改内容如下
from sqlalchemy import MetaData
from sqlalchemy import create_engine
from person import Person # 是自己定义的Person类(Person表结构的文件,我的是在person.py文件中定义)

metadata = MetaData() # 创建一个 MetaData 对象,描述你的数据库结构

# 创建连接数据库的engine
engine = create_engine("mysql+pymysql://root:000000@localhost/spider?charset=utf8")
metadata.reflect(bind=engine)  # 从数据库中获取表的结构
tables = dict(metadata.tables)
tables['person'] = Person.__table__
metadata.tables = tables  # 将修改后的 metadata.tables 赋值给 metadata
# 上面都是添加的,最好添加到文件开头,下面还有一个要修改的

把target_metadata = None
修改为target_metadata = metadata
  1. 修改alembic.ini
	sqlalchemy.url = mysql+pymysql://root:000000@localhost/testspider?charset=utf8
  1. 修改person.py中的Person类,添加city字段
	Base = declarative_base()
	
	class Person(Base):
	    __tablename__ = "person"
	    id = Column(Integer, primary_key=True, autoincrement=True) # primary_key表示主键 autoincrement表示自增长
	    name = Column(String(32), unique=True)
	    gender = Column(String(32))   
	    city = Column(String(32))
  1. 执行如下命令,添加修改说明
	alembic revision --autogenerate -m "描述信息,譬如修改了表的哪些字段"
	# 例子alembic revision --autogenerate -m "Person表添加了city字段"
  1. 执行如下命令,这个命令会修改表结构,修改为当前Person表的类型
	alembic upgrade head

至此,表结构修改完毕

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值