Python连接数据库的梳理

我们通常用的数据库类型主要有关系型数据库,非关系型数据库等,其中关系型数据库主要有Microsoft SQL Server ,MySQL,Oracle,SQLite等,常用的非关系型数据库包括Redis、DynamoDB,MongoDB等

​​​​​​​

一  关系型数据库

1.使用pymysql库连接MySQL数据库:

import pymysql# 创建连接conn = pymysql.connect(host='localhost', user='username', password='password', db='database_name')# 创建游标cursor = conn.cursor()# 执行SQL语句cursor.execute("SELECT * FROM test_table")# 获取查询结果rows = cursor.fetchall()# 关闭游标和连接cursor.close()conn.close()

2.使用sqlite3库连接SQLite数据库:

import sqlite3# 连接SQLite数据库(内存中的数据库或本地文件)conn = sqlite3.connect('my_database.db')# 创建一个游标对象cursor = conn.cursor()# 执行SQL语句cursor.execute("CREATE TABLE IF NOT EXISTS my_table (id INTEGER PRIMARY KEY, name TEXT)")# 插入数据cursor.execute("INSERT INTO my_table VALUES (?, ?)", (1, 'Alice'))# 提交事务conn.commit()# 查询数据cursor.execute("SELECT * FROM my_table")rows = cursor.fetchall()# 关闭连接conn.close()

3.使用psycopg2库连接PostgreSQL数据库:​​​​​​​

import psycopg2# 创建连接conn = psycopg2.connect(    dbname="test_database",    user="username",    password="password",    host="localhost")# 创建游标cursor = conn.cursor()# 执行SQL语句cursor.execute("SELECT * FROM test_table")# 获取查询结果rows = cursor.fetchall()# 提交事务(如果进行了写操作)conn.commit()# 关闭游标和连接cursor.close()conn.close()

4.Python 连接Oracle数据库

安装 cx_Oracle 库: 确保已经安装了Oracle Instant Client以及相应的SDK(对于较新版本的cx_Oracle)。可以使用pip来安装cx_Oracle:

pip install cx_Oracle

连接 Oracle 数据库: 以下是一个Python脚本的基本示例,演示如何建立与Oracle数据库的连接:​​​​​​​

import cx_Oracle# 设置Oracle数据库连接参数dsn = cx_Oracle.makedsn('hostname', 'port', 'service_name')  # 例如:makedsn('mydbserver', '1521', 'orclpdb1')username = 'your_username'password = 'your_password'# 创建数据库连接connection = cx_Oracle.connect(username, password, dsn)# 创建游标对象cursor = connection.cursor()# 执行SQL查询或命令cursor.execute("SELECT * FROM your_table")# 获取查询结果for row in cursor:    print(row)# 关闭游标和连接cursor.close()connection.close()

二  非关系型数据库

1.Python 连接 MongoDB数据库

MongoDB是一种非关系型数据库,以文档的方式存储数据,在Python中连接MongoDB需要使用第三方库pymongo,以下代码是Pyton链接MongoDB数据库

需要安装MongoDB库​​​​​​​

pip install pymongo
from pymongo import MongoClient# 创建MongoDB客户端对象,这里假设MongoDB服务运行在本地默认端口27017上client = MongoClient('localhost', 27017)# 检查是否成功连接try:    client.server_info()  # 如果连接成功,会返回服务器信息    print("Connected to MongoDB successfully!")except Exception as e:    print(f"Failed to connect to MongoDB: {e}")# 连接到一个数据库(假设数据库名为'db_name')db = client['db_name']# 选择一个集合(相当于SQL中的表,假设集合名为'collection_name')collection = db['collection_name']# 插入一条文档数据document = {'name': 'John Doe', 'age': 30, 'city': 'New York'}collection.insert_one(document)# 查询所有文档for doc in collection.find():    print(doc)# 关闭连接(PyMongo库通常不需要手动关闭连接,它会在程序结束时自动关闭)# client.close()

注意:

  • 在生产环境中,你可能需要配置用户名、密码以及认证机制(如SCRAM-SHA-1)来访问MongoDB。

  • MongoDB使用的是JSON-like的数据结构——BSON,因此插入和查询的数据是字典形式。

此外,MongoDB Atlas云服务或企业内部部署的MongoDB实例可能需要指定连接字符串,而非单独的主机名和端口。例如:

client = MongoClient('mongodb+srv://username:password@cluster0.mongodb.net/test?retryWrites=true&w=majority')

2.Python 连接Redis数据库

安装 redis-py 库:

pip install redis

连接 Redis数据库: 以下是一个Python脚本的基本示例,演示如何建立与Redis数据库的连接:

import redis# 创建Redis连接对象,这里假设Redis服务运行在本地默认端口6379上r = redis.Redis(host='localhost', port=6379, db=0)# 检查是否成功连接if r.ping():    print("Connected to Redis successfully!")else:    print("Failed to connect to Redis.")# 设置一个键值对r.set('key', 'value')# 获取键对应的值value = r.get('key')print(f"The value of key is: {value}")# 关闭连接(redis-py库通常不需要手动关闭连接,它会自动管理连接池)# r.close()

请根据实际情况调整hostport参数以指向你的Redis服务器地址和端口号。同时,可以通过db参数指定要连接的数据库编号(Redis支持多个数据库,默认为0)

3.Python链接HBase数据库

安装 happybase 库:

pip install happybase

连接 HBase 数据库: 以下是一个Python脚本的基本示例,演示如何建立与HBase的连接:

from happybase import Connection# 创建HBase连接对象,这里假设HBase thrift服务运行在本地默认端口9090上connection = Connection('localhost', 9090)# 检查是否成功连接try:    connection.tables()    print("Connected to HBase successfully!")except Exception as e:    print(f"Failed to connect to HBase: {e}")
# 打开一个表(假设已经存在名为'table_name'的表)table = connection.table('table_name')# 插入一行数据table.put(b'row_key', {'family:qualifier': b'value'})# 获取一行数据row = table.row(b'row_key')print(row)# 关闭连接connection.close()

注意:

  • 在实际生产环境中,可能需要配置Hadoop的安全认证(如Kerberos)才能访问HBase。

  • happybase是基于HBase的Thrift接口进行操作,因此你需要确保HBase集群开启了Thrift服务,并且能够通过网络访问。

此外,如果你正在使用的是较新的HBase版本,可能需要使用Phoenix SQL接口,并配合pyphoenix等库进行连接和操作。

三 Python 连接数据库需要注意的事项?

  1. 正确安装和配置库:

    根据所使用的数据库类型(如MySQL、PostgreSQL、Oracle、Redis、MongoDB等),确保已正确安装并导入相应的Python库。
  2. 连接管理:

    连接资源是有限的,因此应合理管理数据库连接。打开连接后及时关闭,避免资源泄漏。一些库(如pymysqlpsycopg2)提供了连接池功能,可以复用连接以提高性能。
  3. SQL注入防护:

    在构造SQL语句时,尽量使用参数化查询或预编译语句来防止SQL注入攻击。例如,在pandas的read_sql_query函数或者通过ORM方式操作数据库时都会自动处理这个问题。
  4. 事务处理:

    对于涉及到多条SQL命令的操作,需要妥善处理事务,确保数据的一致性。通常要在执行一系列修改操作前后调用begin()commit()方法(如果所有操作成功则提交事务,否则回滚)。部分库会提供自动提交的功能,但根据具体业务场景可能需要手动控制。
  5. 错误处理与异常捕获:

    在执行数据库操作时,务必进行适当的错误处理,尤其是捕获并处理可能出现的异常,如网络中断、权限不足、表不存在、字段缺失等。
  6. 数据清洗与验证:

    在将数据写入数据库之前,应对数据进行必要的清洗和格式校验,避免不符合数据库约束的数据导致插入失败或其他问题。
  7. 性能优化:

    对于大量数据的操作,考虑使用批量插入或批处理查询来提高效率,减少数据库I/O次数。适当创建索引以加速查询速度,但注意过多索引可能会影响写入性能。
  8. 安全敏感信息处理:

    不要硬编码数据库用户名、密码等敏感信息在代码中,建议采用环境变量或密钥管理服务存储。
  9. 兼容性和版本匹配:

    确保使用的Python库版本与数据库服务器版本兼容,避免因版本不匹配带来的未知问题。
  10. 资源释放:

    使用完游标、连接等资源后,务必确保它们被正确关闭或释放,防止内存泄漏和其他资源占用问题。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/242033.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

day2:TCP、UDP网络通信模型

思维导图 机械臂实现 #include <head.h> #define SER_POTR 8899 #define SER_IP "192.168.125.223" int main(int argc, const char *argv[]) {//创建套接字int cfdsocket(AF_INET,SOCK_STREAM,0);if(cfd-1){perror("");return -1;}//链接struct so…

Elasticsearch 数据类型相关总结:快速参考指南【记录】

在Elasticsearch中&#xff0c;有多种数据类型可用于定义字段。 在开始了解数据类型之前&#xff0c;首先要知道&#xff0c;在Elasticsearch中&#xff0c;分词处理主要针对文本字段&#xff0c;而对于其他类型字段&#xff08;如数值、日期、布尔等&#xff09;&#xff0c;通…

虚幻UE 材质-进阶边界混合之运行时虚拟纹理

之前在学习空山新雨后时对于边缘虚化过渡处理有很多技术 今天又要介绍一个边缘过渡的方法&#xff1a;运行时虚拟纹理 文章目录 前言一、运行时虚拟纹理二、使用步骤总结 前言 边缘过渡柔和的方式我们之前介绍了很多&#xff0c;但是效果也不是最好的。 像素偏移PDO和我们今天…

解决国内Linux服务器无法使用Github的方法

解决思路&#xff1a;修改Host https://www.ipaddress.com/ 利用上面的网站查询github.com和raw.githubusercontent.com的DNS解析的IP地址 最后&#xff0c;修改服务器的/etc/hosts 添加如下两行&#xff1a; 140.82.112.3 github.com 185.199.108.133 raw.githubuserconte…

IntelliJ IDEA 常用快捷键一览表(通用型,提高编写速度,类结构、查找和查看源码,替换与关闭,调整格式)

文章目录 IntelliJ IDEA 常用快捷键一览表1-IDEA的日常快捷键第1组&#xff1a;通用型第2组&#xff1a;提高编写速度&#xff08;上&#xff09;第3组&#xff1a;提高编写速度&#xff08;下&#xff09;第4组&#xff1a;类结构、查找和查看源码第5组&#xff1a;查找、替换…

bash shell基础命令(一)

文章目录 1.shell启动2. shell提示符3. bash手册3.1 man手册解读 4. 浏览Linux文件系统4.1 遍历目录4.1.1 绝对路径4.1.2 相对路径 4.2 列出目录和文件4.3 处理文件4.3.1创建文件4.3.2 复制文件4.3.3 链接文件4.3.3.1.软链接4.3.3.2 硬链接 4.3.4 文件重命名4.3.5 删除文件4.3.…

获取域控的方法

在域渗透中、作为渗透测试人员&#xff0c;获取域控的权限基本上可以获取整个内网的权限 1.高权限读取本地密码 当域管理员在域成员机器上登录进行工作的时候&#xff0c;会将明文密码保存在本地进行的lsass.exe&#xff0c;可以通过 mimikatz来读取到本地的明文密码。 priv…

HarmonyOS应用开发者高级认证试题库(鸿蒙)

目录 考试链接&#xff1a; 流程&#xff1a; 选择&#xff1a; 判断 单选 多选 考试链接&#xff1a; 华为开发者学堂华为开发者学堂https://developer.huawei.com/consumer/cn/training/dev-certification/a617e0d3bc144624864a04edb951f6c4 流程&#xff1a; 先进行…

01-开始Rust之旅

1. 下载Rust 官方推荐使用 rustup 下载 Rust&#xff0c;这是一个管理 Rust 版本和相关工具的命令行工具。下载时需要连接互联网。 这边提供了离线安装版本。本人学习的机器环境为&#xff1a; ubuntu x86_64&#xff0c;因此选用第②个工具链&#xff1b; 1. rust-1.75.0-x86_…

设计模式的学习笔记

设计模式的学习笔记 一. 设计模式相关内容介绍 1 设计模式概述 1.1 软件设计模式的产生背景 设计模式最初并不是出现在软件设计中&#xff0c;而是被用于建筑领域的设计中。 1977 年美国著名建筑大师、加利福尼亚大学伯克利分校环境结构中心主任 Christopher Alexander 在…

Vue 3 hooks的基本使用及疑问

前言 vue3也用过一段时间了&#xff0c;hooks听说过&#xff0c;但是一直没有用过。公司的前端项目里也没有相应的应用&#xff0c;因此打算系统的学习一下。 hooks与普通函数的区别 以实现一个加法功能为例。 普通函数未抽离 <template><div class"box&quo…

STM32 GD32 瑞萨 psoc 等单片机 无线wifi蓝牙最佳解决方案

新联鑫威一系列低功耗高性价比sdio wifi/蓝牙combo的模块CYWL6208 , CYWL6312, CYW6209等可以搭配stm32 各种型号例如以下,支持sta/ap/apsta&#xff0c;双模蓝牙的应用&#xff0c;支持rt-thread, freertos, Azure RTOS, Linux, Android系统. 稳定强&#xff0c;功耗低&#x…

HFSS笔记/信号完整性分析(二)——软件仿真设置大全

文章目录 1、多核运算设置1.1 如何设置1.2 如何查看自己电脑的core呢&#xff1f;1.3 查看求解的频点 2、求解模式设置Driven Terminal vs Driven modal 3、Design settings4、自适应网格划分5、更改字体设置 仅做笔记整理与分享。 1、多核运算设置 多核运算只对扫频才有效果&…

Java项目:11 Springboot的垃圾回收管理系统

作者主页&#xff1a;源码空间codegym 简介&#xff1a;Java领域优质创作者、Java项目、学习资料、技术互助 文中获取源码 项目介绍 功能介绍 本系统通过利用系统的垃圾回收流程&#xff0c;提高垃圾回收效率&#xff0c;通过垃圾回收的申请&#xff0c;增删改查&#xff0c;垃…

stm32 FOC系列 直流有刷控制原理

1、直流有刷驱动板 使用三极管搭建的简易 H 桥电路&#xff0c;如图 5.3.1 所示&#xff1a; 图 5.3.1 是使用三极管搭建的简易 H 桥电路&#xff0c;其中 MOTOR 表示直流有刷电机&#xff0c; Q1、 Q2、 Q3 和 Q4 为 4 个三极管&#xff0c;其中 Q1 和 Q3 接在了电源正极&…

leetcode234. 回文链表

题目 给你一个单链表的头节点 head &#xff0c;请你判断该链表是否为回文链表。如果是&#xff0c;返回 true &#xff1b;否则&#xff0c;返回 false 。 示例 1&#xff1a; 输入&#xff1a;head [1,2,2,1] 输出&#xff1a;true示例 2&#xff1a; 输入&#xff1a;hea…

【已解决】Qt Creator设计模式被禁用不能点的原因及解决方案

Qt Creator 下载地址&#xff08;含历史版本&#xff09;&#xff1a;https://download.qt.io/official_releases/qtcreator/ 症状 Qt Creator 目前最新版为12.0.1&#xff0c;安装后打开.qml文件发现设计工具图标为禁用状态。 原因及解决方案 根据官网材料&#xff08;Qt C…

使用 TiUP 部署 TiDB 集群

TIDB优点 支持分布式且支持事务的关系型数据库&#xff0c;不用考虑分库分表 同时满足了可伸缩&#xff0c;高可用&#xff0c;关系型&#xff0c;支持事务。 基本上按官网的文档来就行了。 在线部署 以普通用户身份登录中控机。以 tidb 用户为例&#xff0c;后续安装 TiUP …

Red Hat Enterprise Linux 8.9 安装图解

引导和开始安装 选择倒计时结束前&#xff0c;通过键盘上下键选择下图框选项&#xff0c;启动图形化安装过程。需要注意的不同主板默认或者自行配置的固件类型不一致&#xff0c;引导界面有所不同。也就是说使用UEFI和BIOS的安装引导界面是不同的&#xff0c;如图所示。若手动调…

软件测试|SQLAlchemy query() 方法查询数据

简介 上一篇文章我们介绍了SQLAlchemy 的安装和基础使用&#xff0c;本文我们来详细介绍一下如何使用SQLAlchemy的query()方法来高效的查询我们的数据。 创建模型 我们可以先创建一个可供我们查询的模型&#xff0c;也可以复用上一篇文章中我们创建的模型&#xff0c;代码如…