使用python编写从csv文件中每隔15s读取一行数据,放入特定的postgre数据库中,并且在读取前先读取数据库和csv文件的字段名,校验数据库与csv文件的字段名是否匹配
时间: 2024-05-02 14:21:31 浏览: 149
以下是一个可能的实现:
```python
import csv
import psycopg2
import time
# 数据库连接信息
DB_NAME = 'your_db_name'
DB_USER = 'your_db_user'
DB_PASSWORD = 'your_db_password'
DB_HOST = 'localhost'
DB_PORT = '5432'
# CSV文件路径
CSV_FILE_PATH = 'your_csv_file_path'
# 数据库表名
TABLE_NAME = 'your_table_name'
# 获取CSV文件的字段名
with open(CSV_FILE_PATH, 'r') as csv_file:
reader = csv.reader(csv_file)
csv_fields = next(reader)
# 连接数据库
conn = psycopg2.connect(
dbname=DB_NAME,
user=DB_USER,
password=DB_PASSWORD,
host=DB_HOST,
port=DB_PORT
)
# 获取数据库表的字段名
with conn.cursor() as cur:
cur.execute(f"SELECT column_name FROM information_schema.columns WHERE table_name = '{TABLE_NAME}'")
db_fields = [row[0] for row in cur.fetchall()]
# 校验字段名是否匹配
if csv_fields != db_fields:
print('CSV文件的字段名与数据库表的字段名不匹配')
conn.close()
exit()
# 读取CSV文件,并将数据插入数据库
with open(CSV_FILE_PATH, 'r') as csv_file:
reader = csv.reader(csv_file)
next(reader) # 跳过字段名行
for row in reader:
with conn.cursor() as cur:
cur.execute(f"INSERT INTO {TABLE_NAME} ({','.join(db_fields)}) VALUES ({','.join(['%s' for _ in range(len(db_fields))])})", row)
conn.commit()
print('已插入一行数据')
time.sleep(15)
# 关闭数据库连接
conn.close()
```
这个脚本首先读取CSV文件的字段名,并连接到PostgreSQL数据库,获取指定表的字段名,然后校验两者是否匹配。如果不匹配,则会输出错误信息并退出程序。如果匹配,则会依次读取CSV文件中的每一行数据,并插入到数据库中。插入一行数据后,程序会暂停15秒钟,然后继续读取下一行数据。最后,程序会关闭数据库连接。
阅读全文