分享一个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类定义的讲解
Nov 01 Python
用Python中的__slots__缓存资源以节省内存开销的方法
Apr 02 Python
Python实现字符串与数组相互转换功能示例
Sep 22 Python
对Python 网络设备巡检脚本的实例讲解
Apr 22 Python
Python函数any()和all()的用法及区别介绍
Sep 14 Python
python微元法计算函数曲线长度的方法
Nov 08 Python
python使用threading.Condition交替打印两个字符
May 07 Python
python GUI库图形界面开发之PyQt5下拉列表框控件QComboBox详细使用方法与实例
Feb 27 Python
Python实现猜年龄游戏代码实例
Mar 25 Python
基于Keras中Conv1D和Conv2D的区别说明
Jun 19 Python
如何基于Python爬取隐秘的角落评论
Jul 02 Python
解决PyCharm IDE环境下,执行unittest不生成测试报告的问题
Sep 03 Python
Python利用capstone实现反汇编
关于Python中进度条的六个实用技巧分享
如何在Python中妥善使用进度条详解
Apr 05 #Python
Python接口自动化之文件上传/下载接口详解
Apr 05 #Python
关于python3 opencv 图像二值化的问题(cv2.adaptiveThreshold函数)
Python中使用Opencv开发停车位计数器功能
Python采集股票数据并制作可视化柱状图
You might like
PHP获取某个月最大天数(最后一天)的方法
2015/07/29 PHP
Laravel Intervention/image图片处理扩展包的安装、使用与可能遇到的坑详解
2017/11/14 PHP
php中array_fill函数的实例用法
2021/03/02 PHP
Mootools 1.2教程(2) DOM选择器
2009/09/14 Javascript
在vs2010中调试javascript代码方法
2011/02/11 Javascript
jquery.cookie.js 操作cookie实现记住密码功能的实现代码
2011/04/27 Javascript
JS按位非(~)运算符与~~运算符的理解分析
2011/07/31 Javascript
Javascript 加载和执行-性能提高篇
2012/12/28 Javascript
jquery post方式传递多个参数值后台以数组的方式进行接收
2013/01/11 Javascript
sails框架的学习指南
2014/12/22 Javascript
ECMAScript6块级作用域及新变量声明(let)
2015/06/12 Javascript
jQuery简单实现提交数据出现loading进度条的方法
2016/03/29 Javascript
javascript的列表切换【实现代码】
2016/05/03 Javascript
使用Ajax与服务器(JSON)通信实例
2016/11/04 Javascript
jQuery插件autocomplete使用详解
2017/02/04 Javascript
JavaScript对象拷贝与赋值操作实例分析
2018/12/10 Javascript
这应该是最详细的响应式系统讲解了
2019/07/22 Javascript
layui数据表格重载实现往后台传参
2019/11/15 Javascript
JS apply用法总结和使用场景实例分析
2020/03/14 Javascript
基于JQuery和DWR实现异步数据传递
2020/10/16 jQuery
[14:19]2018年度COSER大赛-完美盛典
2018/12/16 DOTA
剖析Python的Tornado框架中session支持的实现代码
2015/08/21 Python
完美解决Pycharm无法导入包的问题 Unresolved reference
2018/05/18 Python
Python3.5 Pandas模块之Series用法实例分析
2019/04/23 Python
Ubuntu下Anaconda和Pycharm配置方法详解
2019/06/14 Python
Python3 翻转二叉树的实现
2019/09/30 Python
Python基于wordcloud及jieba实现中国地图词云图
2020/06/09 Python
Tory Burch德国官网:美国时尚生活品牌
2018/01/03 全球购物
Flesh Beauty官网:露华浓集团旗下彩妆品牌
2021/02/15 全球购物
.net面试题
2016/09/17 面试题
会计出纳员的自我评价
2014/01/15 职场文书
学生期末评语大全
2014/04/30 职场文书
交通事故一次性赔偿协议书范本
2014/11/02 职场文书
成绩单评语
2015/01/04 职场文书
地道战观后感
2015/06/04 职场文书
Redis基本数据类型Zset有序集合常用操作
2022/06/01 Redis