mac使用python写一个修改postgresql数据库表数据的脚本,雪花算法,psycopg2库安装,无法从源解析导入“psycopg2”PylancereportMissingModuleSou

项目场景:

上一节我使用了pyenv控制我的mac的版本,
安装一手python

查看最新的python3的版本
pyenv latest -k 3
我当前看到的是最新是3.12.5
然后安装
pyenv install 3.12.5
设置全局的python环境
pyenv global 3.12.5

python环境安装完成,你可以使用python --version看看python版本


直接展示代码,遇到的问题再下面讲

提示:这里描述项目中遇到的问题:

例如:数据传输过程中数据不时出现丢失的情况,偶尔会丢失一部分数据
APP 中接收数据代码:

import time
from datetime import datetime
import psycopg2

  #自定义雪花算法,这里是复制的腾讯云社区的一段代码,
  #https://cloud.tencent.cn/developer/article/2383263
class Snowflake:  
    def __init__(self, worker_id, data_center_id):
        ### 机器标识ID
        self.worker_id = worker_id  
        ### 数据中心ID
        self.data_center_id = data_center_id  
        ### 计数序列号
        self.sequence = 0  
        ### 时间戳
        self.last_timestamp = -1
  
    def next_id(self):  
        timestamp = int(time.time() * 1000)  
        if timestamp < self.last_timestamp:  
            raise Exception("Clock moved backwards. Refusing to generate id for %d milliseconds" % abs(timestamp - self.last_timestamp))  
        if timestamp == self.last_timestamp:  
            self.sequence = (self.sequence + 1) & 4095  
            if self.sequence == 0:  
                timestamp = self.wait_for_next_millis(self.last_timestamp)  
        else:  
            self.sequence = 0  
        self.last_timestamp = timestamp  
        return ((timestamp - 1288834974657) << 22) | (self.data_center_id << 17) | (self.worker_id << 12) | self.sequence  
  
    def wait_for_next_millis(self, last_timestamp):  
        timestamp = int(time.time() * 1000)  
        while timestamp <= last_timestamp:  
            timestamp = int(time.time() * 1000)  
        return timestamp  


# 数据库连接配置
conn_params = {
    "host": "localhost",
    "port": "5432",
    "database": "你的数据库名称",
    "user": "数据库账号",
    "password": "数据库密码"
}

### test雪花算法,你可以打开测试你的雪花算法

# if __name__ == '__main__':  
    # worker_id = 1  
    # data_center_id = 1  
    # snowflake = Snowflake(worker_id, data_center_id)  
#     for i in range(10):  
#         try:  
#             print(snowflake.next_id())  
#         except Exception as e:  
#             print("Clock moved backwards:", e)

# 连接到数据库
with psycopg2.connect(**conn_params) as conn:
    with conn.cursor() as cur:
        # 执行查询
        cur.execute("SELECT a.id id, a.customer_id customer_id FROM xxx a where xxx = xxx")
        # 创建字典并初始化
        my_map = {
            "aaa": "aaa",
            "bbb": "bbb",
            "ccc": "ccc",
        }
        # 获取所有查询结果
        results = cur.fetchall()
        print(results)
        worker_id = 1  
        data_center_id = 1  
        snowflake = Snowflake(worker_id, data_center_id)  
        
        # 遍历结果并执行插入操作
        for id, customer_id in results:
            # 插入语句
            for key, value in my_map.items():
                # 获取当前时间
                current_time = datetime.now()

                # 将当前时间转换为timestamp格式
                current_timestamp = psycopg2.Timestamp(current_time.year, current_time.month, current_time.day, current_time.hour, current_time.minute, current_time.second)
                insert_query = "INSERT INTO xxx (id,xxx,xxx customer_id) VALUES (%s,%s,%s, %s)"
                # 执行插入语句
                cur.execute(insert_query, (snowflake.next_id(), key,value,customer_id))
        
        # 提交事务
        conn.commit()

遇到的问题psycopg2导入不进来:

我用pip install psycopg2老是报错,说是找不到postgres的pg_config配置,我服了难不成要我本地下载一个数据库,后面问了各种ai,最后chatgpt解决了。
解决过程,gpt推荐我去安装
pip install psycopg2-binary
这个倒是成功安装了,但是vscode编辑器代码里面还是报错,我就纳闷了,后面问了下gpt,需要改vscode的配置

下面是ChatGPT说的

1. 确保 VSCode 使用正确的 Python 解释器
Pylance 可能在使用不同的 Python 解释器,这可能导致它找不到 psycopg2 模块。

步骤:

打开 VSCode。
1.按 Cmd + Shift + P(或 Ctrl + Shift + P)打开命令面板。(ps:直接鼠标右键吧,下面也有命令面板)
2.输入并选择 "Python: Select Interpreter"。
3.选择与你在终端中使用的相同的 Python 解释器。
4.如果你使用虚拟环境,确保选择的是该虚拟环境的 Python 解释器。

在这里插入图片描述
至于我为什么选这个版本,首先我装的是pyenv的,然后路径带这个的比较对,然后我装的是3.12.5的python版本,那肯定是这个了。直接选择。到此,ok,全部搞定,错也不报了,爽了,直接运行,修改数据库成功。
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值