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.mzph.cn/news/636439.shtml

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

相关文章

MongoDB之索引

常用命令 查看表的索引 db.<table>.getIndexes() 查看表索引的大小 db.<table>.totalIndexSize() 重建索引 db.<table>.reIndex() 删除索引 db.COLLECTION_NAME.dropIndex("INDEX-NAME") db.COLLECTION_NAME.dropIndexes() _id 索引无法删…

MCU最小系统原理图中四个问题详解——芯片中有很多电源管脚的原因(VDD/VSS/VBAT)、LC滤波、两级滤波、NC可切换元件

前言&#xff1a;本文对MCU最小系统原理图中的四个问题进行详解&#xff1a;芯片中有很多电源管脚的原因&#xff08;VDD/VSS/VBAT&#xff09;、LC滤波、两级滤波、NC可切换元件。本文以GD32F103C8T6最小系统原理图举例 目录&#xff1a; 芯片中有很多电源管脚的原因&#x…

echarts dataZoom实现左右滑动与放大缩小 并精确控制显示几条数据

//Xdata是横轴的长度&#xff08;若x轴80条数据&#xff0c;默认显示最新的20条&#xff09; var start Xdata.length - 20; var end Xdata.length - 1; dataZoom: [ type: slider, show: true, startValue: dataZoomStart, endValue: dataZoomEnd, dataBackground: { ar…

STL——list

1、list介绍 1. list 是可以在常数范围内在任意位置进行插入和删除的序列式容器&#xff0c;并且该容器可以前后双向迭代。 2. list 的底层是带头双向循环链表结构&#xff0c;双向链表中每个元素存储在互不相关的独立节点中&#xff0c;在节点中通过指针指向其前一个元素和后…

CVE-2023-46226 Apache iotdb远程代码执行漏洞

项目介绍 Apache IoTDB 是针对时间序列数据收集、存储与分析一体化的数据管理引擎。它具有体量轻、性能高、易使用的特点&#xff0c;完美对接 Hadoop 与 Spark 生态&#xff0c;适用于工业物联网应用中海量时间序列数据高速写入和复杂分析查询的需求。 项目地址 https://io…

Leetcoder Day9|栈与队列part01

语言&#xff1a;Java/C 目录 理论基础 C 栈 队列 Java 栈 队列 ​编辑 232.用栈实现队列 225. 用队列实现栈 Queue Deque 今日心得 理论基础 又是考研时数据结构里接触到的老朋友&#xff0c;栈是先进后出&#xff0c;队列是先进先出。 C 现在刷题除了思路还…

力扣-202. 快乐数解析-弗洛伊德循环查找算法

题目链接 public static void Happy(int n) {int sum 0;int digit 0;for (int i 0; i < 20; i) {while (n ! 0) {digit n%10;sum digit*digit;n/10;}System.out.print(sum " ");n sum;sum 0;}} 使用代码测试一下每一代数字 n 2 : 4 16 37 58 89 145 42 …

自然语言处理(Natural Language Processing,NLP)解密

专栏集锦&#xff0c;大佬们可以收藏以备不时之需&#xff1a; Spring Cloud 专栏&#xff1a;http://t.csdnimg.cn/WDmJ9 Python 专栏&#xff1a;http://t.csdnimg.cn/hMwPR Redis 专栏&#xff1a;http://t.csdnimg.cn/Qq0Xc TensorFlow 专栏&#xff1a;http://t.csdni…

Servlet中service()与doGet() doPost() 是什么关系

Servlet&#xff08;Server Applet&#xff09;&#xff0c;全称Java Servlet。是用Java编写的服务器端程序。其主要功能在于交互式地浏览和修改数据&#xff0c;生成动态Web内容。狭义的Servlet是指Java语言实现的一个接口&#xff0c;广义的Servlet是指任何实现了这个Servlet…

关于去除信号中的直流分量效果演示(零频率分量)

本文作者&#xff1a; slience_me 文章目录 关于去除信号中的直流分量效果演示&#xff08;零频率分量&#xff09;1. 效果图展示&#xff1a;2. 快速傅里叶变换FFT3. 相关验证代码 关于去除信号中的直流分量效果演示&#xff08;零频率分量&#xff09; 1. 效果图展示&#x…

JDK 动态代理(Spring AOP 的原理)(面试重点)

代理模式 也叫委托模式.定义&#xff1a;为其他对象提供⼀种代理以控制对这个对象的访问.它的作⽤就是通过提供⼀个代理类,让我们 在调⽤⽬标⽅法的时候,不再是直接对⽬标⽅法进⾏调⽤,⽽是通过代理类间接调⽤&#xff0c;在某些情况下,⼀个对象不适合或者不能直接引⽤另⼀个对…

51单片机蜂鸣器

蜂鸣器 蜂鸣器的工作原理 三极管的工作原理 三极管是一种半导体器件&#xff0c;通常由三个掺杂不同的半导体材料层构成。它常用于放大和开关电路中。三极管的工作原理可简述如下&#xff1a; 放大作用&#xff1a;三极管可以放大电流和电压信号。它的工作原理基于控制一个较大…

Web前端与低代码可以碰出什么火花?

技术快速迭代&#xff0c;Web前端开发已经逐渐成为构建现代应用程序的关键组成部分。它不仅涉及到美观的界面设计&#xff0c;还包括后端功能的实现&#xff0c;以及跨平台兼容性的考虑。然而&#xff0c;传统的Web前端开发过程往往需要进行长时间的编码和调试&#xff0c;这使…

LTC6820和isoSPI使用

1、MSTR主控/受控 MSTR (引脚 11/ 引脚 12)&#xff1a;串行接口主 / 从选择器输入。MSTR接VCC&#xff0c;则LTC6820为从机&#xff1b;MSTR接GND&#xff0c;则LTC6820为主机 2、SLOW慢速/快速 SLOW (引脚 12/ 引脚 13)&#xff1a;慢速接口选择输入。当时钟频率≤ 200kHz …

C++和Python最常用的库框架一览

一、C常用库 1. 标准模板库(STL) STL包含丰富的数据结构与算法。比如vector动态数组;list双向链表;map基于红黑树实现,支持快速查找键值对。常用算法有sort排序、find搜索等。这些容器算法类和函数模板,是C程序员必不可少的基础。 2. Boost Boost是近年兴起的高质量C库集合…

网络安全:守护数字世界的盾牌

在当今数字化的时代&#xff0c;网络已经渗透到我们生活的方方面面。从社交媒体到在线银行&#xff0c;从在线购物到工作文件传输&#xff0c;网络几乎无处不在。然而&#xff0c;随着网络的普及&#xff0c;网络安全问题也日益凸显。那么&#xff0c;如何确保我们的数字资产安…

递归、搜索与回溯算法(专题一:递归)

往期文章&#xff08;希望小伙伴们在看这篇文章之前&#xff0c;看一下往期文章&#xff09; &#xff08;1&#xff09;递归、搜索与回溯算法&#xff08;专题零&#xff1a;解释回溯算法中涉及到的名词&#xff09;【回溯算法入门必看】-CSDN博客 接下来我会用几道题&#…

Docker-安装实践(mysql,redis集群,tomcat)

docker实践(提供几个安装案例&#xff09; 安装Tomcat # 拉取镜像,可以指定标签不指定默认为最新 docker pull tomcat docker run -itd -p 8080:8080 --name tomcat tomcat:latest #这样内部默认80端口&#xff0c;主机的映射端口会随机分配一个 docker run -itd -P tomcat…

Python-基础篇-数据结构-列表、元组、字典、集合

文章目录 思维导图❓ 大抵是何物数据结构切片 &#x1f4ac;具体是何物列表&#x1f4bb; list&#x1f4bb; [ ]自我介绍精神面貌使用说明生理体征增删查改 方法汇总 元组&#x1f4bb; tuple&#x1f4bb; ( )自我介绍使用说明精神面貌生理体征增删查改 字典&#x1f4bb; di…

【C++】vector容器接口要点的补充

接口缩容 在VS编译器的模式下&#xff0c;类似于erase和insert接口的函数通常会进行缩容&#xff0c;因此&#xff0c;insert和erase行参中的迭代器可能会失效。下图中以erase为例&#xff1a; 代码如下&#xff1a; #include <iostream> #include <vector> #inclu…