Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 为什么只插入1000个元素?_Python_Python 3.x_Postgresql_Csv - Fatal编程技术网

Python 为什么只插入1000个元素?

Python 为什么只插入1000个元素?,python,python-3.x,postgresql,csv,Python,Python 3.x,Postgresql,Csv,我想用这段代码在数据库中插入100万行,但只插入1000行,我不知道为什么 我有两个包含1000行的csv文件,如下所示: 凯瑟琳娜,拉斯穆斯,82-965-3140,1962年9月29日,克拉斯穆斯8时报 导入psycopg2 导入csv 打印(“\n”) csv_file1=open('/home/oscarg/Downloads/base de datos/archivo1.csv',“r”) csv_file2=open('/home/oscarg/Downloads/base de d

我想用这段代码在数据库中插入100万行,但只插入1000行,我不知道为什么

我有两个包含1000行的csv文件,如下所示:

凯瑟琳娜,拉斯穆斯,82-965-3140,1962年9月29日,克拉斯穆斯8时报

导入psycopg2
导入csv
打印(“\n”)
csv_file1=open('/home/oscarg/Downloads/base de datos/archivo1.csv',“r”)
csv_file2=open('/home/oscarg/Downloads/base de datos/archivo2.csv',“r”)
尝试:
connection=psycopg2.connect(user=“oscar”,
密码=”,
host=“127.0.0.1”,
port=“5432”,
database=“challenge6_7”)
cursor=connection.cursor()
csv_reader1=csv.reader(csv_file1,分隔符=',')
对于csv_读取器1中的行:
csv_reader2=csv.reader(csv_file2,分隔符=',')
康塔多=+1
对于csv_reader2中的第2行:
nombre=行[0]+“”+行2[0]
apellido=行[1]+“”+行2[1]
cedula_id=第[2]行+第2[2]行
如果不是(contador%1000):
fecha_nacimiento=“”+行[3]+“”
其他:
fecha_nacimiento=“”+第2行[3]+“”
如果不是(contador%3):
电子邮件=行[4]+“@hotmail.com”
其他:
email=row2[4]+“@gmail.com”
postgres_insert_query=“插入到客户(nombre、apellido、cedula_id、fecha_nacimiento、客户电子邮件)值(%s,%s,%s,%s)”
记录到插入=(名称、阿佩利多、塞杜拉id、地址、电子邮件)
cursor.execute(postgres\u insert\u查询,记录到\u insert)
commit()连接
如果(contador==1000):
康塔多=0
除了(异常,psycopg2.Error)作为错误:
打印(error.pgerror)
最后:
#正在关闭数据库连接。
如果(连接):
cursor.close()
连接。关闭()
打印(“PostgreSQL连接已关闭”)
csv_file1.close()
csv_file2.close()

插入1000行,然后停止,这是我的代码、psycopg或我的数据库有问题吗?

第二个csv文件的第二次迭代可能会导致读卡器指针过期(文件结束),因此不会读取任何内容

您可能希望先将行存储在列表中,然后对其进行迭代

见:

编辑:这就是问题所在。我自己做了一个小测试

import csv

csv_file1=open("a.csv", "r")
csv_file2=open("1.csv", "r")

csv_reader1 = csv.reader(csv_file1, delimiter=',')
for row in csv_reader1:
    csv_file2=open("1.csv", "r") # Removing this line makes the code run N times
                                 # Instead of N x N (a million in your example.)
    csv_reader2 = csv.reader(csv_file2, delimiter=',')
    for row2 in csv_reader2:
        print(row, row2)

我通过在第一个循环中打开文件(而不是读卡器)来测试它。但是,一次又一次地打开文件似乎不是最佳做法。如果没有内存限制,则应将其存储在列表中。

是否打印错误?否仅1000,然后停止