尧图建网站 尧图建网站 YAOTU WEB BUILD 免费咨询
ARTICLE DETAIL

资讯详情

深耕网站建设与建站编程的一线实战洞察。

PG数据库实操基础|PostgreSQL安装、建库建表、权限放开、Python代码完整连接实操

PG数据库实操基础|PostgreSQL安装、建库建表、权限放开、Python代码完整连接实操 一、技术概述PG优势原生JSONB二进制JSON字段、支持索引查询、事务稳定是工业级AI后端标准数据库。本篇核心落地内容PG安装固定规范配置项目专属数据库 AI检测表手动创建权限彻底放开解决99%连接报错Python原生代码直连PG完整实操重点新增细致内容连接测试、增删查、报错分析、运行效果二、PostgreSQL安装与固定规范必严格照此配置1. 推荐版本PostgreSQL 14 / 15兼容性最强适配 Python3.8、SQLAlchemy、FastAPI。2. 安装固定参数全程项目统一端口5432PG默认端口不修改超级账号postgres密码自己固定一个后续所有代码必须一致编码UTF-83. 检查PG服务是否正常运行WinR 输入services.msc找到postgresql-x64-14必须状态正在运行、开机自启服务没启动Python代码100%连不上数据库。三、pgAdmin4可视化操作建库、建表1. 创建项目专属数据库禁止使用默认 postgres 库存业务数据。新建数据库名yolo_detect_db编码UTF-8所有者postgres2. 创建YOLOv8检测记录表进入 yolo_detect_db - Query Tool执行建表语句CREATE TABLE IF NOT EXISTS detect_record ( id SERIAL PRIMARY KEY, img_path VARCHAR(255) NOT NULL, detect_result JSONB NOT NULL, target_num INTEGER DEFAULT 0, infer_cost FLOAT DEFAULT 0.0, detect_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP );字段说明JSONB专门存YOLO多目标、坐标、置信度嵌套数据可查询可索引SERIAL自增主键无需手动传idCURRENT_TIMESTAMP自动填充检测时间四、关键数据库权限放开Python能连接的前提新手连接失败99%都是权限没开不是代码问题。1. 修改 postgresql.conf找到安装目录 config 文件夹postgresql.conf修改listen_addresses *含义允许所有地址访问数据库2. 修改 pg_hba.conf末尾添加host all all 127.0.0.1/32 md5含义本地所有程序可通过账号密码连接数据库3. 重启PG服务修改配置必须重启服务否则永久不生效。五、重点Python完整代码连接PG数据库逐行详解前置依赖之前已装pip install psycopg2-binary1. 完整可运行连接代码新建db_connect.py# 导入PostgreSQL官方Python驱动是Python操作PG数据库的核心依赖 import psycopg2 # 导入数据库连接专属异常类精准捕获连接失败、服务未启动、端口错误、权限不足等问题 from psycopg2 import OperationalError def create_db_connect(): 建立PG数据库长连接通用工具函数 return: conn(数据库连接对象), cur(SQL执行游标对象) conn负责数据库事务提交、连接状态维护、连接关闭 cur负责执行SQL语句、接收查询结果、操作数据表 # 项目固定数据库配置所有参数必须和本机PG配置完全一致 db_config { host: 127.0.0.1, # 本地数据库回环地址仅本地访问杜绝网络连接报错 port: 5432, # PostgreSQL默认固定端口全局不修改 user: postgres, # PG系统默认超级管理员账号无需改动 password: 你自己安装PG时设置的密码, # 个人自定义密码必须精准匹配否则连接失败 database: yolo_detect_db # 本章手动创建的YOLO项目专属数据库名 } # try: # 调用psycopg2连接方法基于配置发起TCP网络请求打通Python与PG数据库通信通道 conn psycopg2.connect( hostdb_config[host], portdb_config[port], userdb_config[user], passworddb_config[password], databasedb_config[database] ) # 创建SQL执行游标所有数据库增删改查操作必须通过游标完成 cur conn.cursor() # 连接成功日志提示 print(✅ 数据库连接成功) # 返回连接对象和游标对象供后续数据操作使用 return conn, cur # 捕获所有数据库连接异常统一友好提示避免程序直接崩溃 except OperationalError as e: print(❌ 数据库连接失败) print(失败原因, e) # 连接失败返回空对象防止后续代码调用报错 return None, None # 程序入口当前文件直接运行时执行数据库连接测试 if __name__ __main__: # 调用自定义函数获取数据库连接、游标实例 conn, cur create_db_connect()2. 逐行代码详细解释你最需要的部分psycopg2Python唯一官方PG驱动所有Python连PG都靠它db_config数据库四要素缺一不可host127.0.0.1本地数据库地址禁止写0.0.0.0连接port5432PG固定端口userpostgres超级管理员账号password你安装PG时手动输入的密码错一个字符连不上databaseyolo_detect_db必须是我们刚刚手动建的库名psycopg2.connect()真正发起TCP连接和数据库建立通道conn 连接对象负责事务、提交、关闭连接cur 游标对象负责执行SQL、查数据、写数据3. 运行方式 正确效果终端执行python db_connect.py成功效果控制台输出✅ 数据库连接成功失败效果打印错误信息对应下面排错表。六、连接成功后实操写入查询数据完整可跑在上面代码基础上追加AI测试数据写入逻辑模拟YOLO检测结果入库# 导入PG数据库核心驱动用于连接数据库、执行SQL操作 import psycopg2 # 导入连接异常类单独捕获数据库连接相关错误 from psycopg2 import OperationalError def create_db_connect(): # 数据库核心配置字典统一管理连接参数方便后期修改维护 db_config { host: 127.0.0.1, port: 5432, user: postgres, password: 你自己的密码, database: yolo_detect_db } try: # **kwargs解包配置字典快速传入连接参数简化代码 conn psycopg2.connect(**db_config) # 初始化游标所有SQL语句的执行载体 cur conn.cursor() print(✅ 数据库连接成功) return conn, cur # 捕获连接失败异常返回空对象保证程序健壮性 except OperationalError as e: print(❌ 连接失败, e) return None, None # 程序入口函数测试数据库读写功能 if __name__ __main__: # 获取数据库连接和游标实例 conn, cur create_db_connect() # 校验连接、游标是否创建成功成功才执行数据操作 if conn and cur: # 定义PG插入数据SQL语句 # 使用%s作为参数占位符参数化查询杜绝SQL注入漏洞安全规范写法 sql INSERT INTO detect_record (img_path, detect_result, target_num, infer_cost) VALUES (%s, %s, %s, %s) # 模拟YOLOv8真实AI检测结果嵌套JSON格式数据 # 适配PG的JSONB字段存储检测类别、置信度、目标坐标 test_result {objects: [{cls: person, conf: 0.89, box: [10,20,100,200]}]} # 游标执行插入SQL传入动态参数自动替换占位符 cur.execute(sql, (test_01.jpg, test_result, 1, 0.05)) # 【核心必写】PostgreSQL默认开启事务机制 # 所有增删改操作必须手动commit否则数据仅存在内存不会真正入库 conn.commit() print(✅ 数据写入成功) # 执行查询SQL读取detect_record表中所有数据 cur.execute(SELECT * FROM detect_record;) # fetchall()获取本次查询的所有结果返回嵌套元组格式数据 res cur.fetchall() print( 当前库中数据) print(res) # 【资源释放规范】先关闭游标释放SQL执行资源 cur.close() # 再关闭数据库连接释放TCP通信通道 # 避免连接堆积、内存泄露、数据库连接数占满卡死 conn.close()核心知识点新手必懂%s 占位符PG参数化查询防止SQL注入禁止字符串拼接SQLconn.commit()PG默认开启事务不commit数据不会真正入库fetchall()取出所有查询结果必须关闭游标和连接防止连接泄露、数据库卡死七、连接报错精准排错表全覆盖could not connect to serverPG服务未启动 / 端口不对 / 权限文件没改password authentication failed密码填错90%人的问题database xxx does not exist库名写错必须是 yolo_detect_dbrelation detect_record does not exist没执行建表SQLpermission deniedpg_hba.conf 权限未放行、未重启服务八、本章总结本章补齐了全网教程最缺的Python原生PG完整连接实操。从数据库安装、权限放行、建库建表、代码逐行解析、数据读写、报错排错全流程闭环。
返回列表