Windows10 MINGW64下wget SSL协议版本错误致数据导入失败求助
问题:Windows10 MINGW64环境下CSV导入PostgreSQL脚本执行失败
在Windows10的MINGW64环境中运行一套CSV数据导入PostgreSQL的脚本时出现错误,相关文件及执行详情如下:
Dockerfile
FROM python:3.9.13 RUN apt-get install wget RUN pip install pandas sqlalchemy psycopg2 WORKDIR /app COPY ingest_data.py ingest_data.py ENTRYPOINT [ "python", "ingest_data.py" ]
ingest_data.py
#!/usr/bin/env python # coding: utf-8 import os import argparse from time import time import pandas as pd from sqlalchemy import create_engine def main(params): user = params.user password = params.password host = params.host port = params.port db = params.db table_name = params.table_name url = params.url # 备份文件为gzip压缩格式,需保留正确扩展名以让pandas正常读取 if url.endswith('.csv.gz'): csv_name = 'output.csv.gz' else: csv_name = 'output.csv' os.system(f"wget {url} -O {csv_name}") engine = create_engine(f'postgresql://{user}:{password}@{host}:{port}/{db}') df_iter = pd.read_csv(csv_name, iterator=True, chunksize=100000) df = next(df_iter) df.tpep_pickup_datetime = pd.to_datetime(df.tpep_pickup_datetime) df.tpep_dropoff_datetime = pd.to_datetime(df.tpep_dropoff_datetime) df.head(n=0).to_sql(name=table_name, con=engine, if_exists='replace') df.to_sql(name=table_name, con=engine, if_exists='append') while True: try: t_start = time() df = next(df_iter) df.tpep_pickup_datetime = pd.to_datetime(df.tpep_pickup_datetime) df.tpep_dropoff_datetime = pd.to_datetime(df.tpep_dropoff_datetime) df.to_sql(name=table_name, con=engine, if_exists='append') t_end = time() print('inserted another chunk, took %.3f second' % (t_end - t_start)) except StopIteration: print("Finished ingesting data into the postgres database") break if __name__ == '__main__': parser = argparse.ArgumentParser(description='Ingest CSV data to Postgres') parser.add_argument('--user', required=True, help='postgres用户名') parser.add_argument('--password', required=True, help='postgres密码') parser.add_argument('--host', required=True, help='postgres主机地址') parser.add_argument('--port', required=True, help='postgres端口') parser.add_argument('--db', required=True, help='postgres数据库名') parser.add_argument('--table_name', required=True, help='写入数据的目标表名') parser.add_argument('--url', required=True, help='CSV文件的URL地址') args = parser.parse_args() main(args)
执行命令
URL="https://github.com/DataTalksClub/nyc-tlc-data/releases/download/yellow/yellow_tripdata_2021-01.csv.gz" winpty python3 ingest_data.py \ --user=root \ --password=root \ --host=localhost \ --port=5431 \ --db=ny_taxi \ --table_name=yellow_taxi_trips \ --url=${URL}
报错信息
SYSTEM_WGETRC = c:/progra~1/wget/etc/wgetrc syswgetrc = C:\Program Files\Git\mingw64/etc/wgetrc --2024-01-22 08:38:16-- https://github.com/DataTalksClub/nyc-tlc-data/releases/download/yellow/yellow_tripdata_2021-01.csv.gz Resolving github.com... 140.82.121.3 Connecting to github.com|140.82.121.3|:443... connected. OpenSSL: error:1407742E:SSL routines:SSL23_GET_SERVER_HELLO:tlsv1 alert protocol version Unable to establish SSL connection. Traceback (most recent call last): File "D:\DE-ZoomCamp\week_1_basics_n_setup\2_docker_sql\ingest_data.py", line 78, in <module> main(args) File "D:\DE-ZoomCamp\week_1_basics_n_setup\2_docker_sql\ingest_data.py", line 33, in main df_iter = pd.read_csv(csv_name, iterator=True, chunksize=100000) File "C:\Users\Armut\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.9_qbz5n2kfra8p0\LocalCache\local-packages\Python39\site-packages\pandas\util\_decorators.py", line 311, in wrapper return func(*args, **kwargs) File "C:\Users\Armut\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.9_qbz5n2kfra8p0\LocalCache\local-packages\Python39\site-packages\pandas\io\parsers\readers.py", line 680, in read_csv return _read(filepath_or_buffer, kwds) File "C:\Users\Armut\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.9_qbz5n2kfra8p0\LocalCache\local-packages\Python39\site-packages\pandas\io\parsers\readers.py", line 575, in _read parser = TextFileReader(filepath_or_buffer, **kwds) File "C:\Users\Armut\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.9_qbz5n2kfra8p0\LocalCache\local-packages\Python39\site-packages\pandas\io\parsers\readers.py", line 933, in __init__ self._engine = self._make_engine(f, self.engine) File "C:\Users\Armut\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.9_qbz5n2kfra8p0\LocalCache\local-packages\Python39\site-packages\pandas\io\parsers\readers.py", line 1235, in _make_engine return mapping[engine](f, **self.options) File "C:\Users\Armut\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.9_qbz5n2kfra8p0\LocalCache\local-packages\Python39\site-packages\pandas\io\parsers\c_parser_wrapper.py", line 75, in __init__ self._reader = parsers.TextReader(src, **kwds) File "pandas\_libs\parsers.pyx", line 551, in pandas._libs.parsers.TextReader.__cinit__ pandas.errors.EmptyDataError: No columns to parse from file
已安装最新版本的OpenSSL,但问题仍未解决,寻求有效解决方案。
内容的提问来源于stack exchange,提问作者Yokanishaa
相关产品推荐
相关产品推荐

