1 import pandas as pd
2 import psycopg2
3 from datetime import datetime
4 import re
5
6 # 读取CSV文件
7 csv_file = '文件地址'
8 df = pd.read_csv(csv_file, sep='|')
9
10 # 连接到PostgreSQL数据库
11 conn = psycopg2.connect(
12 dbname="数据库",
13 user="用户",
14 password="密码",
15 host="host",
16 port="端口号"
17 )
18
19 # 创建一个游标对象
20 cur = conn.cursor()
21
22 # 查询数据库中的最大ID
23 cur.execute("SELECT COUNT(*) FROM tbt_cardbin")
24 max_id = cur.fetchone()[0] + 1
25
26 # 执行查询
27 cur.execute("SELECT DISTINCT card_brand FROM tbt_cardbin")
28 # 获取查询结果
29 results = cur.fetchall()
30 # 获取brand
31 first_word = re.search(r'\\([^\\]+)_', csv_file).group(1).split('_')[0]
32 # 遍历查询结果,如果值等于first_word,则更新is_active为N
33 for result in results:
34 if result[0] == first_word:
35 cur.execute(f"UPDATE tbt_cardbin SET is_actived = 'N' WHERE card_brand = '{result[0]}'")
36
37 # 遍历DataFrame的每一行,插入到数据库中
38 for index, row in df.iterrows():
39 # 生成新的ID 格式是cdno 加8位数字
40 new_id = f"CDNO{str(max_id).zfill(8)}"
41 max_id += 1
42
43 # 获取当前时间作为load_time字段的值
44 load_time = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
45 is_actived = "Y"
46
47 if 'mastercard' in csv_file:
48 ica_bin = 'ICA'
49 else:
50 ica_bin = 'ISSUER_BIN'
51 # 构建插入语句,根据你的表结构和CSV文件内容进行调整
52 #mastercard-ICA Visa-ISSUER_BIN
53 insert_query = f"""
54 INSERT INTO public.tbt_cardbin (card_no, company_name, ica_bin,account_range_from,account_range_to,
55 brand_product_code,brand_product_name,acceptance_brand,country,card_brand,is_actived,load_time)
56 VALUES (
57 '{new_id}','{row['COMPANY_NAME']}', '{row['ISSUER_BIN']}','{row['ACCOUNT_RANGE_FROM']}','{row['ACCOUNT_RANGE_TO']}',
58 '{row['BRAND_PRODUCT_CODE']}','{row['BRAND_PRODUCT_NAME']}','{row['ACCEPTANCE_BRAND']}','{row['COUNTRY']}','{first_word}',
59 '{is_actived}', '{load_time}');
60 """
61
62 # 执行插入语句
63 cur.execute(insert_query)
64
65 # 提交事务
66 conn.commit()
67
68 # 关闭游标和连接
69 cur.close()
70 conn.close()