分享一个Python 遇到数据库超好用的模块


Posted in Python onApril 06, 2022

前言:

大家好,今天我和大家来聊一下SQLALchemy这个模块,该模块是Python当中最有名的ORM框架,该框架是建立在数据库API之上,使用关系对象映射进行数据库的操作,简而言之便是:将对象转换成SQL,然后使用数据API执行SQL并获取执行结果。

看到这里,相信不少的读者可能会感觉到云里雾里,我们就通过一个简单的案例在说明一下吧。

例如我们想要在mysql当中新建一个表格,我们首先需要连接上数据库,代码如下:

:# 连接数据库
sql_connect = 'mysql+pymysql://root:123456@localhost:3306/sql_prac?charset=utf8'
engine = create_engine(sql_connect)
DBSession = sessionmaker(bind=engine)
# 创建对象的基类:
BaseModel = declarative_base()

一、定义表结构

对于新创建的表格,我们命名为是“User”,同时我们还需要定义表结构,

代码如下:

#定义对象
class User(BaseModel):
    # 表名
    __tablename__ = 'user'
    # 表结构,其中ID设为是主键,并且是自动增加的
    id = Column(Integer, primary_key=True, autoincrement=True)
    name = Column(String(20))
    age = Column(Integer)

二、创建以及删除表

对于创建表以及删除表的操作,代码如下:

#创建映射的数据库表
def init_db():
    BaseModel.metadata.create_all(engine)

#删除映射的数据库表
def drop_db():
    BaseModel.metadata.drop_all(engine)

三、插入数据

我们可以尝试往新建的表格当中插入几个值,

代码如下:

def insert_data(name_1, age_1):
    # 创建session对象,相当于MySQLdb里面的游标
    session = DBSession()
    # 创建新User对象:
    new_user = User(name=name_1, age=age_1)
    # 添加到session:
    session.add(new_user)
    # 提交添加数据的操作
    session.commit()
    # 关闭session
    session.close()
    
if __name__ == "__main__":
    insert_data(name_1="Mike", age_1=20)
    insert_data(name_1="John", age_1=35)
    .......

运行后的结果如下图所示:

 分享一个Python 遇到数据库超好用的模块

四、查询

要是我们想要查询表格中的数据,可以这么来做

# 创建Session:
session = DBSession()
# 创建Query查询,filter是where条件,最后调用one()返回唯一行,如果调用all()则返回所有行:
user = session.query(User).filter(User.name == 'Tom').one()
# 打印类型和对象的name属性和age属性:
print(user.name, user.age)
# 关闭Session:
session.close()


要是调用的是all()则返回所有行,因此我们需要通过for循环遍历出来的结果然后打印,

代码如下:

users = session.query(User).filter(User.name == 'John').all()
for u in users:
    print(u.name, u.age)

五、更新和删除数据

我们尝试来更新表格中的一些数据,代码如下:

# 创建Session:
session = DBSession()
# 可以进行多条数据更新
user = session.query(User).filter(User.id == 3)
user.update({User.age: 30})
# 提交数据
session.commit()
# 关闭Session
session.close()

通过“ID”来锁定要更新的数据的位置,然后我们通过调用update()方法将其年龄改成指定的值。与此同时我们还可以来删除表格当中的一些值,

代码如下:

# 创建Session
session = DBSession()
# 删除哪些数据
user = session.query(User).filter(User.id == 5).one()
session.delete(user)
# 提交数据
session.commit()
# 关闭session
session.close()

同样我们也是通过“ID”来锁定要删除数据的位置,然后调用delete()方法。

六、直接运行SQL语句

当然我们在创建session之后,我们也可以在里面直接运行SQL语句,例如我们想要查看一下总共有哪些数据库,

代码如下:

session = DBSession()
print(session.execute('show databases').fetchall())
session.close()

或者我们是想返回表格中的所有数据,代码如下:

session = DBSession()
print(session.execute('select * from user').fetchall())
session.close()

七、DataFrame到MySQL数据库

我们同时也可以批量的将excel或者csv文件当中的数据批量的导入到MySQL数据库当中,我们先通过Pandas读取文件中的数据,

代码如下:

sql_connect = 'mysql+pymysql://用户名:密码@ip地址:端口号/数据库名称?charset=utf8'
engine = create_engine(sql_connect)
df = pd.read_excel("sqlalchemy_test1.xlsx")
df.to_sql("user", engine, index=False, if_exists='append')

当然我们也可以从数据库的某个表格当中来读取数据,代码如下:

df = pd.read_sql("表格名", engine)
print(df.head())

到此这篇关于 分享一个Python 遇到数据库超好用的模块的文章就介绍到这了,更多相关 Python模块内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
用python实现批量重命名文件的代码
May 25 Python
简单介绍Python的Django框架的dj-scaffold项目
May 30 Python
python装饰器与递归算法详解
Feb 18 Python
在Python中定义和使用抽象类的方法
Jun 30 Python
13个最常用的Python深度学习库介绍
Oct 28 Python
Numpy数组转置的两种实现方法
Apr 17 Python
Django 限制用户访问频率的中间件的实现
Aug 23 Python
对python借助百度云API对评论进行观点抽取的方法详解
Feb 21 Python
django admin后台添加导出excel功能示例代码
May 15 Python
Python利用逻辑回归分类实现模板
Feb 15 Python
Python进阶学习之带你探寻Python类的鼻祖-元类
May 08 Python
Python实战之实现简易的学生选课系统
May 25 Python
Python利用capstone实现反汇编
关于Python中进度条的六个实用技巧分享
如何在Python中妥善使用进度条详解
Apr 05 #Python
Python接口自动化之文件上传/下载接口详解
Apr 05 #Python
关于python3 opencv 图像二值化的问题(cv2.adaptiveThreshold函数)
Python中使用Opencv开发停车位计数器功能
Python采集股票数据并制作可视化柱状图
You might like
isset和empty的区别
2007/01/15 PHP
浅析php面向对象public private protected 访问修饰符
2013/06/30 PHP
php生成QRcode实例
2014/09/22 PHP
什么是PEAR?什么是PECL?PHP中两个容易混淆的概念解释
2015/07/01 PHP
PHP 使用二进制保存用户状态的实例
2018/01/29 PHP
Laravel框架路由和控制器的绑定操作方法
2018/06/12 PHP
网页中的图片的处理方法与代码
2009/11/26 Javascript
无阻塞加载脚本分析[全]
2011/01/20 Javascript
JavaScript中的property和attribute介绍
2011/12/26 Javascript
JavaScript高级程序设计阅读笔记(五) ECMAScript中的运算符(一)
2012/02/27 Javascript
不使用浏览器运行javascript代码的方法
2013/07/24 Javascript
js中的setInterval和setTimeout使用实例
2014/05/09 Javascript
js获取网页可见区域、正文以及屏幕分辨率的高度
2014/05/15 Javascript
下拉框select的绑定示例
2014/09/04 Javascript
浅谈javascript中遇到的字符串对象处理
2016/11/18 Javascript
BootStrap 导航条实例代码
2017/05/18 Javascript
Node.js学习教程之HTTP/2服务器推送【译】
2017/10/31 Javascript
js实现全选和全不选
2020/07/28 Javascript
[01:38]DOTA2第二届亚洲邀请赛中国区预选赛出线战队晋级之路
2017/01/17 DOTA
DJANGO-ALLAUTH社交用户系统的安装配置
2014/11/18 Python
Python中类型关系和继承关系实例详解
2015/05/25 Python
python最小生成树kruskal与prim算法详解
2019/01/17 Python
Python SQLAlchemy入门教程(基本用法)
2019/11/11 Python
python装饰器代替set get方法实例
2019/12/19 Python
python GUI库图形界面开发之PyQt5中QWebEngineView内嵌网页与Python的数据交互传参详细方法实例
2020/02/26 Python
python实现密度聚类(模板代码+sklearn代码)
2020/04/27 Python
DjangoWeb使用Datatable进行后端分页的实现
2020/05/18 Python
全面解析CSS Media媒体查询使用操作(推荐)
2017/08/15 HTML / CSS
美国工业用品采购网站:Zoro.com
2020/10/27 全球购物
普通PHP程序员笔试题
2016/01/01 面试题
会计电算一体化个人简历的自我评价
2013/10/15 职场文书
家长会标语
2014/06/24 职场文书
酒店辞职书怎么写
2015/02/26 职场文书
2016元旦晚会主持词
2015/07/01 职场文书
幼儿园秋季开学通知
2015/07/16 职场文书
致毕业季:你如何做好自己的职业生涯规划书?
2019/07/01 职场文书