【发布时间】:2021-07-28 11:08:13
【问题描述】:
我有一个充满 CSV 文件的目录,这些文件需要导入到 SQL Server 数据库的不同表中。幸运的是,附加 CSV 的文件名以字符串“Concat_AAAAAA_XX...”开头,其中 AAAAA 部分是一个字母数字字符串,后跟 XX,它是一个双整数。两者都充当 SQL 中特定表的键。
我的问题是创建 Python 脚本的最优雅的方法是什么,该脚本将从每个文件名中获取 AAAAA 和 XX 值,并知道将这些数据导入哪个表?
CSV1 named: Concat_T101_14_20072021.csv
would need to be imported into Table A
CSV2 named: Concat_RB728_06_25072021.csv
would need to be imported into Table B
CSV3 named: Concat_T144_21_27072021.csv
would need to be imported into Table C
and so on...
我了解到 ConfigParser 包可能会有所帮助,但无法理解如何在此处应用其理论。建议使用 ConfigParser 的原因是因为我想拥有灵活性或编辑配置文件(例如“CONFIG.INI”),而不是将新条目硬编码到 python 脚本中。
到目前为止,我的代码仅适用于独立数据集,可以在 here 找到。
这是我正在使用的代码:
import pypyodbc as odbc
import pandas as pd
import os
os.chdir('SQL Loader')
df = pd.read_csv('Real-Time_Traffic_Incident_Reports.csv')
df['Published Date'] = pd.to_datetime(df['Published Date']).dt.strftime('%Y-%m-%d %H:%M:%S')
df['Status Date'] = pd.to_datetime(df['Published Date']).dt.strftime('%Y-%m-%d %H:%M:%S')
df.drop(df.query('Location.isnull() | Status.isnull()').index, inplace=True)
columns = ['Traffic Report ID', 'Published Date', 'Issue Reported', 'Location',
'Address', 'Status', 'Status Date']
df_data = df[columns]
records = df_data.values.tolist()
DRIVER = 'SQL Server'
SERVER_NAME = 'MY SERVER'
DATABASE_NAME = 'MYDATABASE'
def connection_string(driver, server_name, database_name):
conn_string = f"""
DRIVER={{{driver}}};
SERVER={server_name};
DATABASE={database_name};
Trust_Connection=yes;
"""
return conn_string
try:
conn = odbc.connect(connection_string(DRIVER, SERVER_NAME, DATABASE_NAME))
except odbc.DatabaseError as e:
print('Database Error:')
print(str(e.value[1]))
except odbc.Error as e:
print('Connection Error:')
print(str(e.value[1]))
sql_insert = '''
INSERT INTO Austin_Traffic_Incident
VALUES (?, ?, ?, ?, ?, ?, ?, GETDATE())
'''
try:
cursor = conn.cursor()
cursor.executemany(sql_insert, records)
cursor.commit();
except Exception as e:
cursor.rollback()
print(str(e[1]))
finally:
print('Task is complete.')
cursor.close()
conn.close()
【问题讨论】:
标签: python sql-server pandas configparser pypyodbc