分享一个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编程判断这天是这一年第几天的方法示例
Apr 18 Python
Python实现的选择排序算法原理与用法实例分析
Nov 22 Python
Python:Scrapy框架中Item Pipeline组件使用详解
Dec 27 Python
Python内置函数reversed()用法分析
Mar 20 Python
使用Python通过win32 COM实现Word文档的写入与保存方法
May 08 Python
Python django使用多进程连接mysql错误的解决方法
Oct 08 Python
Python学习笔记之文件的读写操作实例分析
Aug 07 Python
基于python实现从尾到头打印链表
Nov 02 Python
解决Python图形界面中设置尺寸的问题
Mar 05 Python
python3用urllib抓取贴吧邮箱和QQ实例
Mar 10 Python
Python dict和defaultdict使用实例解析
Mar 12 Python
Python logging自定义字段输出及打印颜色
Nov 30 Python
Python利用capstone实现反汇编
关于Python中进度条的六个实用技巧分享
如何在Python中妥善使用进度条详解
Apr 05 #Python
Python接口自动化之文件上传/下载接口详解
Apr 05 #Python
关于python3 opencv 图像二值化的问题(cv2.adaptiveThreshold函数)
Python中使用Opencv开发停车位计数器功能
Python采集股票数据并制作可视化柱状图
You might like
PHP中限制IP段访问、禁止IP提交表单的代码
2011/04/23 PHP
PHP中通过语义URL防止网站被攻击的方法分享
2011/09/08 PHP
php删除指定目录的方法
2015/04/03 PHP
php判断访问IP的方法
2015/06/19 PHP
PHP实现的超长文本分页显示功能示例
2018/06/04 PHP
PHP实现提取多维数组指定一列的方法总结
2019/12/04 PHP
基于jQuery的日期选择控件
2009/10/27 Javascript
基于jquery的内容循环滚动小模块(仿新浪微博未登录首页滚动微博显示)
2011/03/28 Javascript
详解JavaScript设计模式开发中的桥接模式使用
2016/05/18 Javascript
ES6中的箭头函数实例详解
2017/04/06 Javascript
jQuery回调方法使用示例
2017/06/26 jQuery
详解plotly.js 绘图库入门使用教程
2018/02/23 Javascript
JavaScript 中的12种循环遍历方法【总结】
2018/05/31 Javascript
菊花转动的jquery加载动画效果
2018/08/19 jQuery
从零到一详聊创建Vue工程及遇到的常见问题
2019/04/25 Javascript
深入了解JS之作用域和闭包
2020/06/16 Javascript
[03:08]Ti4观战指南上
2014/07/07 DOTA
[03:02]2020完美世界城市挑战赛(秋季赛)总决赛回顾
2021/03/11 DOTA
python元组操作实例解析
2014/09/23 Python
Queue 实现生产者消费者模型(实例讲解)
2017/11/13 Python
python实现抖音视频批量下载
2018/06/20 Python
python命令行工具Click快速掌握
2019/07/04 Python
Python 为什么推荐蛇形命名法原因浅析
2020/06/18 Python
python多线程semaphore实现线程数控制的示例
2020/08/10 Python
HTML5视频播放插件 video.js介绍
2018/09/29 HTML / CSS
为有想象力的人提供的生活方式商店:Firebox
2018/06/04 全球购物
红色故事演讲稿
2014/05/22 职场文书
人代会标语
2014/06/30 职场文书
员工年终自我评价
2014/09/14 职场文书
2015年班组工作总结
2015/04/20 职场文书
工作失职自我检讨书
2015/05/05 职场文书
大学生村官驻村工作心得体会
2016/01/23 职场文书
《陶罐和铁罐》教学反思
2016/03/03 职场文书
AJAX实现省市县三级联动效果
2021/10/16 Javascript
分享MySQL常用 内核 Debug 几种常见方法
2022/03/17 MySQL
解决Springboot PostMapping无法获取数据的问题
2022/05/06 Java/Android