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. 资源释放:

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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

hdu 3709 Balanced Number

Balanced Number 题意 定义一个非负整数在第 p p p 位为 p i v o t pivot pivot 的权重为:这个数位的值 \times 这个数位到 p i v o t pivot pivot 的距离 之和。如果在 p i v o t pivot pivot 左边的权重等于在 p i v o t pivot pivot 右边的权重&#xf…

uni-app小程序:文件下载打开文件方法苹果安卓都适用

api: const filetype e.substr(e.lastIndexOf(.)1)//获取文件地址的类型 console.log(文档,filetype) uni.downloadFile({url: e,//e是图片地址success(res) {console.log(res)if (res.statusCode 200) {console.log(下载成功,);var filePath encodeURI(res.tempFilePath);…

python开发之远程开发工具对比

前言 除了本地开发外,还有一种常见的开发方式就是远程开发,一般情况是一台Windows或mac笔记本作为日常使用的电脑,另有一台linux服务器作为开发服务器。开发服务器的性能往往较强,这样远程开发的方式一方面可以让我们在习惯的系统…

Python网络爬虫步骤是什么?新手小白必看 !

python网络爬虫步骤:首先准备所需库,编写爬虫调度程序;然后编写url管理器,并编写网页下载器;接着编写网页解析器;最后编写网页输出器即可。 本教程操作环境:windows7系统、python3.9版&#xff…

Spring | Spring中的Bean--下

Spring中的Bean: 4.Bean的生命周期5.Bean的配装配式 ( 添加Bean到IOC容器的方式 依赖注入的方式 )5.1 基于XML的配置5.2 基于Annotation (注解) 的装配 (更常用)5.3 自动装配 4.Bean的生命周期 Spring容器可以管理 singleton作用域的Bean的生命周期,在此…

【Github搭建网站】零基础零成本搭建个人Web网站~

Github网站:https://github.com/ 这是我个人搭建的网站:https://xf2001.github.io/xf/ 大家可以搭建完后发评论区看看!!! 搭建教程:https://www.bilibili.com/video/BV1xc41147Vb/?spm_id_from333.999.0.0…

sql570 | 至少有5名下属的经理 | join on | group by | having

讲给一张表,表字段分别为 id 、姓名、部分、经理id,可能存在张三既是下属也是经理 现在找出下属起码有5名员工的经理 CREATE TABLE Employee (id INT,name VARCHAR(255),department VARCHAR(255),managerId INT );INSERT INTO Employee (id, name, depar…

HarmonyOS 页面跳转控制整个界面的转场动画

好 本文 我们来说 页面间的转场动画 就是 第一个界面到另一个界面 第一个界面的退场和第二个界面的进场效果 首先 我这里 创建了两个页面文件 Index.ets和AppView.ets index组件 编写代码如下 import router from "ohos.router" Entry Component struct Index {b…

架构的演进

1.1单体架构 单体架构也称之为单体系统或者是单体应用。就是一种把系统中所有的功能、模块耦合在一个应用中的架构方式。 存在的问题: 代码耦合:模块的边界模糊、依赖关系不清晰,整个项目非常复杂,每次修改代码都心惊胆战迭代困…

LeetCode.2788. 按分隔符拆分字符串

题目 题目链接 分析 题目的意思是给我们一个字符串数组和一个分隔符,让我们按照分隔符把字符串数组分割成新的字符串数组。 看到这个描述,这不就是直接就是利用 按照分隔符分割字符串的系统库函数split(),这个函数的意思就是 把一个字符串…

SpringBoot解决Slow HTTP慢速攻击漏洞

项目场景: 扫描到的漏洞截图: 攻击原理: Web应用在处理HTTP请求之前都要先接收完所有的HTTP头部,因为HTTP头部中包含了一些Web应用可能用到的重要的信息。攻击者利用这点,发起一个HTTP请求,一直不停的发送…

H3C交换机S6850配置M-LAG三层转发

正文共:1999 字 30 图,预估阅读时间:3 分钟 前面提到M-LAG是一种跨设备链路聚合技术,将两台物理设备在聚合层面虚拟成一台设备来实现跨设备链路聚合,从而提供设备级冗余保护和流量负载分担。 之前已经做了DRNI的三层转…

MySQL之外键约束和表关系

前言 一个项目中如果将所有的数据都存放在一张表中是不合理的,比如一个员工信息,公司只有2个部门,但是员工有1亿人,就意味着员工信息这张表中的部门字段的值需要重复存储,极大的浪费资源,因此可以定义一个…

突破性概念“整车智能”背后,比亚迪又在蓄力何方?

比亚迪再以“整车智能”的颠覆性创意惊艳我们,他们这次又在酝酿哪些革命性技术,引领行业? 2024年的比亚迪梦想日,为汽车行业带来了一次全新的飞跃。这家传统但很有实力,却又颇有野心的自主品牌车企,再次以开…

使用Python在本地生成助记词

新建并打开一个空文件夹 逐行 执行命令 python3 -m pip install --upgrade pippip3 install eth_accountpip3 install web3touch acco.py然后看到文件夹下面会有个acco.py文件 将把下面的代码粘贴到acco.py中保存。 import os from eth_account import Accountif __name__ …

AI视频智能识别技术在智慧农业大棚升级改造管理场景中的应用方案

一、需求分析 随着科技的进步和农业现代化的推进,智能化技术逐渐成为现代农业发展的重要支撑。农业大棚作为现代农业的重要组成部分,其智能化改造对于提高农业生产效率、降低成本、增加收益具有重要意义。利用先进的信息化手段来对农业大棚进行管理&…

防伪技术行业研究:年复合增长率约为10%

近年来,我国各种新的防伪技术不断涌现,部分防伪技术已经达到国际先进水平,并广泛应用于产品防伪、票证防伪等领域,推动了防伪行业的持续、健康发展。 常见的产品防伪技术有:隐形分子技术、二维码防伪、揭开留底防伪、安…

【C语言】- 设置控制台标题、编码、文字颜色、大小和字体

【C语言】- 设置控制台标题、编码、文字颜色、大小和字体 文章目录 【C语言】- 设置控制台标题、编码、文字颜色、大小和字体1 - 设置控制台标题2 - 设置控制台编码3 - 设置控制台字体和大小参考链接 1 - 设置控制台标题 因为要用到 Windows API,所以需要包含头文件…

systemverilog/verilog文件操作

1、Verilog文件操作 Verilog具有系统任务和功能,可以打开文件、将值输出到文件、从文件中读取值并加载到其他变量和关闭文件。 1.1 、Verilog文件操作 1.1.1、打开和关闭文件 module tb; // 声明一个变量存储 file handler integer fd; initial begin // 以写权限打开一个文…

计算机vcruntime140.dll丢失要怎么解决,快速解决dll报错问题

在计算机系统中,vcruntime140.dll是一个至关重要的动态链接库文件(DLL),它是Visual C Redistributable运行时组件的重要组成部分。这个特定的.dll文件承载了大量的运行时函数和资源,对于许多基于Windows的应用程序来说…