Python通过ORM操作mysql数据库
2023-12-15 00:37:01
Python操作mysql
- 连接数据库
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")
- 创建表
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)
- 增、删、改、查
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()
修改表字段(非常重要,调研了好久)
- 下载alembic
pip install alembic
- 在创建表的python文件目录下执行
alembic init alembic
执行完这条命令之后,会在执行的目录下,生成一个alembic文件夹和alembic.ini文件
- 修改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
- 修改alembic.ini
sqlalchemy.url = mysql+pymysql://root:000000@localhost/testspider?charset=utf8
- 修改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))
- 执行如下命令,添加修改说明
alembic revision --autogenerate -m "描述信息,譬如修改了表的哪些字段"
# 例子alembic revision --autogenerate -m "Person表添加了city字段"
- 执行如下命令,这个命令会修改表结构,修改为当前Person表的类型
alembic upgrade head
至此,表结构修改完毕
文章来源:https://blog.csdn.net/u013932564/article/details/134932071
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!