在上一节中,我们是用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创建了一张表,然后进行了查询和插入操作。读者可以把这段代码重新封装完善,置于实际项目中。