Python连接数据库的梳理

news2024/11/28 8:43:45

我们通常用的数据库类型主要有关系型数据库,非关系型数据库等,其中关系型数据库主要有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.coloradmin.cn/o/1399263.html

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

相关文章

Qt文件和目录相关操作

1.相关说明 QCoreApplication类、QFile类、QDir、QTemporaryDir类、QTemporaryFile类、QFileSystemWatcher类的相关函数 2.相关界面 3.相关代码 #include "dialog.h" #include "ui_dialog.h" #include <QFileDialog> #include <QTemporaryDir>…

MySQL综合练习题

一、创建表的素材 CREATE TABLE dept ( deptno INT(2) NOT NULL COMMENT 部门编号, dname VARCHAR (15) COMMENT 部门名称, loc VARCHAR (20) COMMENT 地理位置 ); -- 添加主键 ALTER TABLE dept ADD PRIMARY KEY (deptno); -- 添加数据 INSERT INTO dept (deptno…

nuclei安装;linux上 以及使用教程

kali安装go环境_go1.17 kali安装-CSDN博客Ubuntu完美解决Github网站打不开问题 - 一抹烟霞 - 博客园 (cnblogs.com) All releases - The Go Programming Language 然但是上面两个我似乎都没用到网上的教程 也不适用 一个网不好 一个apt没找到包 然后我先试试了版本 结果 我的…

组件通信方式

组件通信 父子组件通信 单向数据流 属性传递props&#xff08;还有插槽&#xff0c;$attrs非属性&#xff09;/$emit&#xff0c;发布订阅模式 方法也可以作为属性 父子组件渲染生命周期&#xff1a; 获取组件实例。$children、ref&$refs/$parent 祖先和后代 组件和后代通信…

python之粘包/粘包的解决方案

python之粘包/粘包的解决方案 什么是粘包 粘包就是在数据传输过程中有多个数据包被粘连在一起被发送或接受 服务端&#xff1a; import socket import struct# 创建Socket Socket socket.socket(socket.AF_INET, socket.SOCK_STREAM)# 绑定服务器和端口号 servers_addr (…

java打包及上传到私服务

一、准备Maven私服Nexus 添加saas.maven 仓库地址&#xff1a;http://192.168.31.109:8081/repository/saas.maven 二、新建SpringBoot项目com.saas.pdf 添加类&#xff1a;PdfUtil.java package com.saas.pdf;public class PdfUtil {public static void Save(String fileP…

ubuntu20遇到缺少qt4相关库的问题

最近需要做套接字通讯的工作&#xff0c;最好是有一个网络调试软件能够接受或者发送套接字&#xff0c;测试代码能够正常通讯。windows下有很多&#xff0c;但是linux下比较少&#xff0c;使用广泛的是下面这一款。 1、安装 首先从网盘&#xff08;链接: https://pan.baidu.c…

安装conda搭建python环境(保姆级教程)

目录 一、Anaconda简介二、Anaconda安装 2.1 Anaconda下载2.2 Anaconda安装2.3 配置环境变量 三、通过conda配置python环境 3.1 创建并激活虚拟环境3.2 管理虚拟环境 一、Anaconda简介 Anaconda 是专门为了方便使用 Python 进行数据科学研究而建立的一组软件包&#xff0c;…

【设计模式-08】Flyweight享元模式

简要说明 简要的理解&#xff1a;享元模式就是新建一个池(Pool)&#xff0c;该池子(Pool)中有新建好的一堆对象&#xff0c;当需要使用时&#xff0c;从池子(Pool)中直接获取&#xff0c;不用重新新建一个对象。通俗的讲就是&#xff1a;共享元数据。 比如Java中的String就是使…

Python圣诞主题绘图:用turtle库打造冬日奇妙画面【第31篇—python:圣诞节】

文章目录 Python圣诞主题绘图导言代码结构概览详细解析drawlight函数tree函数xzs函数drawsnow函数五角星的绘制 完整代码代码解析总结 Python圣诞主题绘图 导言 圣诞季节是个充满欢乐和创意的时刻。在这个技术博客中&#xff0c;我们将深入探讨如何使用Python的turtle库创建一…

【华为 ICT HCIA eNSP 习题汇总】——题目集4

1、&#xff08;多选&#xff09;网络中出现故障后&#xff0c;管理员通过排查发现某台路由器的配置被修改了&#xff0c;那么管理员应该采取哪些措施来避免这种状况再次发生&#xff1f; A、管理员应该通过配置 ACL 来扩展只有管理员能够登录设备 B、管理员应该在路由的管理端…

Redis原理篇(QuickList)

一.前言&#xff1a;ZipList出现的问题 QuickList的出现是为了解决ZipList所存在的一些问题 1.寻找大内存块&#xff0c;申请内存效率低 ZipList所申请的是连续的内存空间&#xff0c;如果ZipList里面存放的数据过多&#xff0c;就需要一块很大的连续内存&#xff0c;系统需…

【c++笔记】用c++解决一系列质数问题!

质数是c语言和c中比较常见的数学问题&#xff0c;本篇文章将带你走进有关质数的一系列基础问题&#xff0c;其中包含常见的思路总结&#xff0c;本篇文章过后&#xff0c;将会持续更新c算法系列&#xff0c;感兴趣的话麻烦点个关注吧&#xff01; 希望能给您带来帮助&#xff…

新能源智慧充电桩方案:AI视频分析技术如何助力充电桩智能监管?

随着AI人工智能、大数据、云计算等技术快速发展与落地&#xff0c;视频智能分析技术在智慧充电桩场景中的应用也越来越广泛。这种技术能够为充电桩站点提供全方位的监控和管理&#xff0c;提高运营效率&#xff0c;保障充电桩设备的安全和稳定运行。 通过TSINGSEE青犀&触角…

实验五 PLSQL编程

&#x1f57a;作者&#xff1a; 主页 我的专栏C语言从0到1探秘C数据结构从0到1探秘Linux &#x1f618;欢迎关注&#xff1a;&#x1f44d;点赞&#x1f64c;收藏✍️留言 &#x1f3c7;码字不易&#xff0c;你的&#x1f44d;点赞&#x1f64c;收藏❤️关注对我真的很重要&…

Arduino开发实例-MTH02温湿度传感器驱动

MTH02温湿度传感器驱动 文章目录 MTH02温湿度传感器驱动1、MTH02温湿度传感器介绍2、硬件准备及接线3、代码实现1、MTH02温湿度传感器介绍 市场上的温湿度传感器在价格、精度和测量范围等方面种类繁多。 MTH02O 是这些传感器中最小的一种。 该传感器使用数字引脚传输温度和湿度…

领略指针之妙

&#x1d649;&#x1d65e;&#x1d658;&#x1d65a;!!&#x1f44f;&#x1f3fb;‧✧̣̥̇‧✦&#x1f44f;&#x1f3fb;‧✧̣̥̇‧✦ &#x1f44f;&#x1f3fb;‧✧̣̥̇:Solitary-walk ⸝⋆ ━━━┓ - 个性标签 - &#xff1a;来于“云”的“羽球人”。…

mac-hadoop3.3.6 源码构建以及踩坑记录

1. 为什么需要构建源码 因为hadoop的可执行文件 是在专门的机器上编译的 其中native库 不一定能适用于每个机器 导致在启动hadoop过程中 出现烦人的警告 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform… using builtin-java classes w…

探索图像检索:从理论到实战的应用

目录 一、引言二、图像检索技术概述图像检索的基本概念图像检索与文本检索的区别特征提取技术相似度计算索引技术 三、图像检索技术代码示例图像特征提取示例相似度计算索引技术 四、图像搜索流程架构数据采集与预处理特征提取相似度计算与排名结果呈现与优化 五、实际应用图像…

探索世界,从一款好用的浏览器开始!

好用的浏览器分享 在这个数字化的时代&#xff0c;浏览器已经成为了我们生活中不可或缺的工具。从浏览新闻、社交媒体到工作学习&#xff0c;我们几乎无时无刻不在与浏览器打交道。那么&#xff0c;如何选择一款好用的浏览器呢&#xff1f;今天&#xff0c;我就来为大家分享几…