Python操作MySQL数据库02----sqlalchamy

2022-03-07 22:35:29 浏览数 (1)

在上一节中,我们是用pymysql库来操作MySQL,这是比较传统的方式。实际开发环境中,常常使用ORM来操作数据库。本小节中,我们介绍Python中的ORM-------sqlalchemy.

1.什么是ORM

ORM全称是:Object Relational Mapping(对象关系映射),其主要作用是在编程中,把面向对象的概念跟数据库中表的概念对应起来。举例来说就是,我定义一个对象,那就对应着一张表,这个对象的实例,就对应着表中的一条记录。

用ORM的好处就是你不用操作表,可以在程序中用面向对象的思路,直接操作对象即可。

2.Python中的ORM------sqlalchemy

sqlalchemy是python的orm程序,在整个python界当中相当出名。

3.安装两个依赖:pymysql,sqlalchemy

建议安装时加个国内的镜像源,如阿里、豆瓣、清华镜像。顺便说下,豆瓣在Python上贡献颇多。

pip install sqlalchemy -i http://pypi.doubanio.com/simple --trusted-host pypi.doubanio.com

pip install pymysql -i http://pypi.doubanio.com/simple --trusted-host pypi.doubanio.com

代码实例:

from sqlalchemy import create_engine

from sqlalchemy.ext.declarative import declarative_base

from sqlalchemy.orm import sessionmaker

from sqlalchemy import Column, Integer, String, ForeignKey, Float

mysql_conn_url = "mysql pymysql://root:a123456!@localhost:10306/study"

engine = create_engine(mysql_conn_url)

OrmBase = declarative_base() # orm base object

class Book(OrmBase):

# 定义表名称

__tablename__ = "python_book"

id = Column(Integer, primary_key=True, autoincrement=True)

book_title = Column(String(200))

book_url = Column(String(200))

book_rate = Column(Integer)

book_price = Column(Float)

class OrmManager(object):

def __init__(self):

self.__make_session()

def create_table(self):

try:

OrmBase.metadata.create_all(

engine) # 这个语句可以创建所有继承了OrmBase的子类的orm数据库表

except Exception as e:

print(f"create_table has error with {e}")

def __make_session(self):

Session = sessionmaker(bind=engine) # 工厂模式,返回类

self.__session = Session()

def fetch_session(self):

return self.__session

def add_records(self, objs):

''':cvar

插入记录

objs: (1) [obj1, obj2] , (2) obj

'''

if isinstance(objs, list):

self.__session.add_all(objs)

else:

self.__session.add(objs)

self.__session.commit() # 提交生效

def query_records(self, Cls):

''':cvar

select

'''

return self.__session.query(Cls).all()

orm_inst = OrmManager()

orm_inst.create_table()

# 查询

query_book = orm_inst.query_records(Book)

print(query_book)

for book in query_book:

print(book.botok_title, book.book_url)

# 插入

book = Book(book_title='golang', book_url='www.golang.org', book_rate=2,

book_price=23.5)

# for i in range(10):

orm_inst.add_records(book)

小结:

以上是使用sqlalchemy创建了一张表,然后进行了查询和插入操作。读者可以把这段代码重新封装完善,置于实际项目中。

0 人点赞