简介
对数据库操作用到的主要模块是sqlalchemy模块。
SQLAlchemy是用Python编程语言开发的一个开源项目。它提供了SQL工具包和ORM(对象关系映射)工具,使用MIT许可证发行。
SQLAlchemy最初在2006年2月发行,发行后便很快的成为Python社区中最广泛使用的ORM工具之一,丝毫不亚于Django自带的ORM框架。
SQLAlchemy采用简单的Python语言,提供高效和高性能的数据库访问,实现了完整的企业级持久模型。它的理念是,SQL数据库的量级和性能比对象集合重要,而对象集合的抽象又重要于表和行。
如果没有sqlalchemy模块,则需进行安装:
pip install sqlalchemy
pip install pymysql
检测是否安装成功的:
>>>import sqlalchemy
>>>sqlalchemy.__version__
'1.4.15'
对数据库操作一共分为三个步骤:连接数据库;建立数据库表;对数据库进行增删改查)
1.连接数据库
安装好模块以后,就要开始进行连库操作了。
from sqlalchemy import create_engine
engine = create_engine("mysql+pymysql://root:123456@10.10.9.91:3306/test_wudi")
首先要把模块引用过来,sqlalchemy模块里有个create_engine函数,看名称create_engine翻译过来是创造引擎的意思,顾名思义就是连接数据库。create_engine参数("数据库+数据库驱动://用户:密码@ip地址:端口号/数据库名称")。
这样子数据库就算是连接了,但是也不算是真正的连接,因为还不能进行增删改查。
2.建立数据库表
from sqlalchemy.ext.declarative import declarative_base
Base = declarative_base()
declarative_base()是sqlalchemy内部封装的一个方法,通过其构造一个基类,这个基类和它的子类,可以将Python类和数据库表关联映射起来。简单的来说就是你python创建表,然后把表信息给declarative_base(),declarative_base()给你在数据库把表创建出来。
class Users(Base):
__tablename__ = "users" #数据库表模型类通过__tablename__和表关联起来。
id = Column(Integer, primary_key=True) #Column表示数据表的列。
name = Column(String(64), unique=True)
email = Column(String(64))
Base.metadata.create_all(engine) #生成数据库表
上述代码就是通过代码创建表的信息,有些代码已经解释出来了
__tablename__="数据库表名",通过这行代码定义你的数据库表叫什么名字
id = Column(Integer, primary_key=True) #Column表示数据表的列,其中参数信息为:
'''
Column内参数信息:
数据类型:Integer 整型;String 字符串类型(CHAR,VARCHAR也可以);
是否为空:nullable=True,
是否为主键:primary_key=True,
是否自增:autoincrement=True,
索引:index=True
唯一索引:unique=True
'''
表创建完了,还有一个至关重要的一步:
Base.metadata.create_all(engine) #生成数据库表
把信息交给declarative_base()去数据库创建表
3.操作数据库
from sqlalchemy.orm import sessionmaker
DbSession = sessionmaker(bind=engine) #大致意思就是绑定你所连接的数据库,bind绑定的意思
session = DbSession() #创建会话
表创建完以后开始来操作的数据库,操作数据库之前需创建个会话,简单点来说,还是你python提交操作信息,session会话去完成。
(1)增加信息
def add():
add_user = Users('01',"test1", "test1@qq.com")
add_user1 = Users('02',"test2", "test2@qq.com")
add_user2 = Users('03',"test3", "test3@qq.com")
add_user3 = Users('04',"test4", "test4@qq.com")
for i in (add_user,add_user1,add_user2,add_user3):
session.add(i)
session.commit() #这一行主要是将你所写的数据写进数据库,如果不加这一行,数据是提交不到数据库的。
上述代码就是增操作,Users就是创建表的那个类,里面的信息需要和你创建表时的信息一样,有几个字段就写几个参数。
session.commit() 这个至关重要,没有这个,你增加的信息是没法提交到数据库的。
(2)查询信息
def chaxun():
user=session.query(Users.id).all()
print('user:',user)
for i in user:
print(i)
查询操作很关键,涉及到你该怎么去删除和修改.
user=session.query(Users.id).all(),session是会话,query顾名思义就是查询,这段代码的意思就是查询users表(User类所创建的表是users,这里写类名称,不写表名称)中id字段的全部信息,如果是session.query(Users).first(),意思就是查询users表中全部字段的第一条信息。
上面那些是暴力查询,查询全部信息,那我该怎么通过条件筛选,去筛选我想要的信息呢?(这里仅仅介绍单表查询,暂不涉及连表查询)。
这里就要用到filter过滤器或者是filter_by过滤器
filter | filter_by |
支持所有比较运算符,相等比较用:== | 只能使用"=","!="和"><" |
过滤用类名.属性名 | 过滤用属性名 |
不支持组合查询,只能连续调用filter变相实现 | 参数是**kwargs,支持组合查询 |
支持and,or和in等 |
下面咱们通过更新和删除去简单看一下filter和filter_by用法
(3)更新数据,删除数据
def Update():
session.query(Users).filter_by(id=1).update({'name':'TEST'})
session.commit()
def Delete():
session.query(Users).filter(Users.id==1).delete()
session.commit()
相信经过查询的介绍,这个更新数据和删除数据大家应该都能看懂了,这里也不必过多解释了,剩下的就靠各位读者尝试和领悟了。
4.结尾
本篇文章就是简简单单说了一下python如何连接数据库,如何对数据库操作,可能有些地方有些模块的参数没介绍到,还请谅解,但是相对于初学python的学者来说还是有点帮助的。
以下是代码信息:
from sqlalchemy import create_engine,Column, String, Integer #create_engine 创建连接
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.sql.functions import user
engine = create_engine("mysql+mysqlconnector://root:123456@10.10.9.91:3306/test_wudi?charset=utf8") #连接数据库
Base = declarative_base() #declarative_base()是sqlalchemy内部封装的一个方法,通过其构造一个基类,这个基类和它的子类,可以将Python类和数据库表关联映射起来。
class Users(Base):
__tablename__ = "users" #数据库表模型类通过__tablename__和表关联起来。
'''
Column内参数信息:
数据类型:Integer 整型;String 字符串类型(CHAR,VARCHAR也可以);
是否为空:nullable=True,
是否为主键:primary_key=True,
是否自增:autoincrement=True,
索引:index=True
唯一索引:unique=True
'''
id = Column(Integer, primary_key=True) #Column表示数据表的列。
name = Column(String(64), unique=True)
email = Column(String(64))
def __init__(self, id,name, email):
self.id=id
self.name = name
self.email = email
Base.metadata.create_all(engine) #生成数据库表
from sqlalchemy.orm import sessionmaker #创建会话
# 创建session
'''
session的常见操作方法包括:
flush:预提交,提交到数据库文件,还未写入数据库文件中
commit:提交了一个事务
rollback:回滚
close:关闭
'''
DbSession = sessionmaker(bind=engine) #类似于绑定你所连接的数据库 bind绑定的意思
session = DbSession()
#增加
def add():
add_user = Users('01',"test1", "test1@qq.com")
add_user1 = Users('02',"test2", "test2@qq.com")
add_user2 = Users('03',"test3", "test3@qq.com")
add_user3 = Users('04',"test4", "test4@qq.com")
for i in (add_user,add_user1,add_user2,add_user3):
session.add(i) #session.add()将会把Model加入当前session维护的持久空间(可以从session.dirty看到)中,直到commit时提交到数据库。
session.commit() #这一行主要是将你所写的数据写进数据库,如果不加这一行,数据是提交不到数据库的
#查询
def chaxun():
user=session.query(Users.id).all()
print('user:',user)
for i in user:
print(type(i))
print(i)
#更新
def Update():
session.query(Users).filter_by(id=1).update({'name':'TEST'})
session.commit()
def Delete():
session.query(Users).filter(Users.id==1).delete()
session.commit()