Python连接MySQL、PostgreSQL数据库实现过程

 更新时间:2025年12月15日 11:14:47   作者:回忆式~过去.  
文章介绍了如何在Python中使用`pymysql`和`psycopg2`模块连接MySQL和PostgreSQL数据库,包括安装库、连接参数、数据库操作和关闭连接的步骤

一、安装库

Python连接MySQL、PostgreSQL数据库需要导入相关的模块,分别是”pymysql“和”psycopg2“模块,我们可以在Pycharm工具中直接搜索安装对应的库然后导入即可,两个数据库连接方式基本一致,所以只拿其中一个作为演示。

如果工具安装失败(有可能是网络原因),也可以使用pip命令进行安装

>>> pip3 install pymysql,psycopg2
>>> #多环境用户需要主要pip版本

如果你的系统不支持 pip 命令,可以使用以下方式安装:

1、使用 git 命令下载安装包安装(你也可以手动下载):

>>> git clone https://github.com/PyMySQL/PyMySQL
>>> cd PyMySQL/
>>> python3 setup.py install

2、如果需要制定版本号,可以使用 curl 命令来安装:

>>> # X.X 为 PyMySQL 的版本号
>>> curl -L https://github.com/PyMySQL/PyMySQL/tarball/pymysql-X.X | tar xz
>>> cd PyMySQL*
>>> python3 setup.py install
>>> # 现在你可以删除 PyMySQL* 目录

二、连接数据库

连接数据库会用到的参数:

database – 数据库名称

user – 用户名

password – 密码

host – 服务器地址 (如果不提供默认连接Unix Socket)

port – 连接端口 (默认5432)

用pymysql模块中的connect连接数据库,同时用cursor()函数创建游标,用于接收返回的结果。

这里返回了一个游标实例对象,说明你已经连接成功了。

三、数据库操作

接下来我们可以使用 .execute 对数据库进行一系列的增删改查操作

运行成功后就可以在电脑上的数据库中查找到相应的变化啦,最后记得关闭数据库的连接,以下是查询结果:

四、代码奉上

我是通过读取配置文件读取数据库信息进行连接的,一并付上代码,有需要的可以参考,不需要的直接忽略

#setting.ini配置文件
[mysql]
# MySQL配置
MYSQL_HOST = 39.101.000.0
MYSQL_PORT = 5432
MYSQL_USER = test
MYSQL_PASSWD = xxxx
MYSQL_DB = xxxx_dev

[postgresql]
# postgresql配置
PG_HOST = 39.101.000.0
PG_PORT = 5432
PG_USER = test
PG_PASSWD = xxxxx
PG_DB = xxxxxx_dev
# load_ini.py文件,读取ini配置文件方法
def load_ini(file_path):
    log.info("加载 {} 文件......".format(file_path))
    config = MyConfigParser()
    config.read(file_path, encoding="UTF-8")
    data = dict(config._sections)
    return data
#run.py文件
#导入所需包
import os
import pymysql
import psycopg2
from common.load_ini import load_ini

#拼接路径以列表的形式进行读取配置文件
BASE_PATH = os.path.dirname(os.path.dirname(os.path.realpath(__file__)))
data_file_path = os.path.join(BASE_PATH, "config", "setting.ini")
mysql_data = load_ini(data_file_path)['mysql']
pg_data = load_ini(data_file_path)['postgresql']
#对库信息进行赋值,此方法只作为演示,大佬可自行编写最优写法
mysql_host = mysql_data["MYSQL_HOST"]
mysql_port = int(mysql_data["MYSQL_PORT"])
mysql_username = mysql_data["MYSQL_USER"]
mysql_password = mysql_data["MYSQL_PASSWD"]
mysql_database = mysql_data["MYSQL_DB"]
pg_host = pg_data["PG_HOST"]
pg_port = int(pg_data["PG_PORT"])
pg_username = pg_data["PG_USER"]
pg_password = pg_data["PG_PASSWD"]
pg_database = pg_data["PG_DB"]

#连接MySQL数据库函数
def my_sql_database():
    #连库相关信息
    mydb = pymysql.connect(
        host=mysql_host,
        port=mysql_port,
        user=mysql_username,
        passwd=mysql_password,
        db=mysql_database,
        charset='utf8'
    )
    mycursor = mydb.cursor()
    # 写入SQL语句对数据库进行增删改操作即可
    sql = "select * from jg_staff where staff_name = '测试1华北项目组'"
    # mycursor.execute("SHOW DATABASES")
    mycursor.execute(sql)
    print(mycursor.fetchall())
    mydb.commit()  # 查询时不需需调用,此方法用于提交当前事务。如果不调用这个方法,无论做了什么修改,自从上次调用#commit()是不可见的

    # 关闭数据库
    mycursor.close()  # 关闭游标
    mycursor.close()  # 关闭数据库连接

#连接PostgreSQL数据库函数
def pg_sql_database():
	#PostgreSQL数据库连接方法和MySQL方法基本一致
    conn = psycopg2.connect(
            host=pg_host,
            port=pg_port,
            user=pg_username,
            password=pg_password,
            database=pg_database
    )
    cur = conn.cursor()
    sql = "select area from b_lands_attribute_2021 bla where id = '20545521'"
    cur.execute(sql)
    print(cur.fetchall()) #打印结果
    conn.commit()  # 查询时不需需调用,此方法用于提交当前事务。如果不调用这个方法,无论做了什么修改,自从上次调用#commit()是不可见的
    # 关闭数据库
    cur.close()  # 关闭游标
    cur.close()  # 关闭数据库连接

def my_sql_insert(sql_case):
    """
    往sql插入数据
    :param sql_case:
    :return:
    """
    mydb = pymysql.connect(
        host=mysql_host,
        port=mysql_port,
        user=mysql_username,
        passwd=mysql_password,
        db=mysql_database,
        charset='utf8mb4'
    )
    mycursor = mydb.cursor()
    mycursor.execute(sql_case)
    mydb.commit()
    mydb.close()

def mysql_select(sql_case):
    """
    查询sql以列表形式输出
    :param sql_case:
    :return:
    """
    try:
        connection = pymysql.connect(
        host=mysql_host,
        port=mysql_port,
        user=mysql_username,
        passwd=mysql_password,
        db=mysql_database,
        charset='utf8mb4'
    )

        with connection.cursor() as cursor:
            cursor.execute(sql_case)

            results = []
            for row in cursor.fetchall():
                # 将包含Decimal的列转换为浮点数
                processed_row = [float(item) if isinstance(item, Decimal) else item for item in row]
                results.append(processed_row)

    except MySQLError as e:
        print(f"Error: {e}")
        results = []

    finally:
        if connection:
            connection.close()

    return results


def my_sql_select(sql_select):
    """
    查询sql以数据类型输出
    :param sql_select:
    :return:
    """
    mydb = pymysql.connect(
        host=mysql_host,
        port=mysql_port,
        user=mysql_username,
        passwd=mysql_password,
        db=mysql_database,
        charset='utf8mb4'
    )
    mycursor = mydb.cursor()
    mycursor.execute(sql_select)
    nested_list = [list(row) for row in mycursor.fetchall()]
    mydb.close()
    return nested_list

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。 

相关文章

  • 详解Python中的argparse模块

    详解Python中的argparse模块

    这篇文章主要介绍了详解Python中的argparse模块,argparse可以让你轻松地编写用户友好的命令行界面,定义你的程序需要的参数,自动生成帮助和用法信息,需要的朋友可以参考下
    2023-07-07
  • Python requests模块session代码实例

    Python requests模块session代码实例

    这篇文章主要介绍了Python requests模块session代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-04-04
  • python计算列表元素与乘积详情

    python计算列表元素与乘积详情

    这篇文章主要介绍了python计算列表元素与乘积,文章围绕主题展开详细内容介绍,具有一定的参考价值,需要的小伙伴可以参考一下
    2022-08-08
  • matplotlib源码解析标题实现(窗口标题,标题,子图标题不同之间的差异)

    matplotlib源码解析标题实现(窗口标题,标题,子图标题不同之间的差异)

    这篇文章主要介绍了matplotlib源码解析标题实现(窗口标题,标题,子图标题不同之间的差异),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-02-02
  • python如何提取xml指定内容

    python如何提取xml指定内容

    这篇文章主要介绍了python如何提取xml指定内容,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-01-01
  • Python调用易语言动态链接库实现验证码功能

    Python调用易语言动态链接库实现验证码功能

    今天成功把易语言调用验证码通杀的DLL在Python中成功调用了,心理美滋滋的,接着把我的经验及示例代码分享给大家,希望对大家有所帮助
    2021-08-08
  • 一文搞懂 Python 的 abc.ABC基类

    一文搞懂 Python 的 abc.ABC基类

    Python里abc.ABC 是“抽象基类”的基类,本文就来介绍一下 Python 的 abc.ABC基类使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2026-02-02
  • 对pandas里的loc并列条件索引的实例讲解

    对pandas里的loc并列条件索引的实例讲解

    今天小编就为大家分享一篇对pandas里的loc并列条件索引的实例讲解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-11-11
  • python实现对excel进行数据剔除操作实例

    python实现对excel进行数据剔除操作实例

    python在数据分析这方便的介绍应该不用多说了,下面这篇文章主要给大家介绍了关于利用python实现对excel进行数据剔除操作的相关资料,文中通过示例代码介绍的非常详细,需要的朋友可以参考借鉴,下面来一起看看吧。
    2017-12-12
  • 跟老齐学Python之坑爹的字符编码

    跟老齐学Python之坑爹的字符编码

    本文主要介绍了在Python2.x中的编码问题,非常的坑爹,不过如果用python3,坑爹的编码问题就不烦恼了。
    2014-09-09

最新评论