Python通过ORM操作mysql数据库

2023-12-15 00:37:01

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

至此,表结构修改完毕

文章来源:https://blog.csdn.net/u013932564/article/details/134932071
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。