পাইথন ব্যবহার করে স্ক্যলাইট 3 ডাটাবেস সারণিতে একটি সিএসভি ফাইল আমদানি করা হচ্ছে


106

আমার একটি সিএসভি ফাইল রয়েছে এবং আমি পাইথনটি ব্যবহার করে এই ফাইলটি আমার স্ক্যালিটি 3 ডাটাবেসে বাল্ক-আমদানি করতে চাই। কমান্ডটি হ'ল ".Import ....."। তবে মনে হচ্ছে এটি এটির মতো কাজ করতে পারে না। স্কেলাইট 3 এ এটি কীভাবে করা যায় তার কোনও উদাহরণ আমাকে দিতে পারেন? আমি কেবল উইন্ডো ব্যবহার করছি। ধন্যবাদ


3
দয়া করে আসল কমান্ড যা কার্যকর হয়নি এবং প্রকৃত ত্রুটি বার্তা সরবরাহ করুন। "আমদানি ...." কিছু হতে পারে। "কাজ করতে পারে না" এটি অনুমান করার পক্ষে আমাদের পক্ষে খুব অস্পষ্ট। বিবরণ ছাড়া, আমরা সাহায্য করতে পারি না।
এস .লট

2
আমি যেমন বলেছিলাম আসল কমান্ডটি ".Import" এবং এটি সিনট্যাক্স ত্রুটি নতুন ".আইপোর্ট"
হোসেইন

10
দয়া করে প্রশ্নের আসল কমান্ডটি পোস্ট করুন। দয়া করে প্রশ্নটিতে প্রকৃত ত্রুটি বার্তাটি পোস্ট করুন। দয়া করে এমন মন্তব্য যুক্ত করবেন না যা কেবল জিনিসগুলিকে পুনরাবৃত্তি করে। দয়া করে আসল অনুলিপি এবং আপনি কী করছেন তা পেস্ট করে প্রশ্নটি আপডেট করুন।
এস .লট

উত্তর:


132
import csv, sqlite3

con = sqlite3.connect(":memory:") # change to 'sqlite:///your_filename.db'
cur = con.cursor()
cur.execute("CREATE TABLE t (col1, col2);") # use your column names here

with open('data.csv','r') as fin: # `with` statement available in 2.5+
    # csv.DictReader uses first line in file for column headings by default
    dr = csv.DictReader(fin) # comma is default delimiter
    to_db = [(i['col1'], i['col2']) for i in dr]

cur.executemany("INSERT INTO t (col1, col2) VALUES (?, ?);", to_db)
con.commit()
con.close()

4
আমি আপনার মত একই সমস্যা ছিল: সিএসভি ফাইলের কলাম শিরোনামে কল 1 এবং কল 2 পরিবর্তন করার বিষয়টি নিশ্চিত করুন। এবং শেষে কনক্লোজ () কল করে ডাটাবেসের সাথে সংযোগটি বন্ধ করুন।
জোনাস

1
ধন্যবাদ, জোনাস আপডেট পোস্ট।
যান্ত্রিক_মেট

আমি not all arguments converted during string formattingযখন এই পদ্ধতির চেষ্টা করি তখন আমি পেতে থাকি।
হোয়াইট কেট

আমি এই পদ্ধতিটি চেষ্টা করেছিলাম, তবে এটি আমার পক্ষে কার্যকর হয় না। আপনি কি আমার ডেটাসেটগুলি এখানে পরীক্ষা করতে পারেন (কিছু কলামের খালি মূল্য ব্যতীত এগুলি খুব সাধারণ) এবং আপনার কোড দিয়ে সেগুলি আমদানির চেষ্টা করতে পারেন? stackoverflow.com/questions/46042623/...
user177196

2
এই কোডটি খুব বড় সিএসভি ফাইলের জন্য অনুকূলিত হয় না (
জিবিগুলির

91

ডিস্কে একটি ফাইলের সাথে একটি স্ক্লাইট সংযোগ তৈরি করা পাঠকের জন্য অনুশীলন হিসাবে ছেড়ে গেছে ... তবে এখন পান্ডাস লাইব্রেরি দ্বারা দ্বি-লাইনার সম্ভব হয়েছে

df = pandas.read_csv(csvfile)
df.to_sql(table_name, conn, if_exists='append', index=False)

ধন্যবাদ. আমি পান্ডার সাথে একটি ইস্যু পেয়েছি। আমার সিএসভি ';' দ্বারা সীমিত করা হয়েছে; এবং এন্ট্রিগুলিতে ',' থাকতে হবে। পান্ডা read_csv এ ত্রুটি দেয়। অস্থায়ীভাবে ডাব্লু / আউট কমা দিয়ে প্রবেশিকা পড়ার জন্য কোনও সেটিং?
আলেক্সি মার্টিয়ানভ

3
sep = ';' ব্যবহার করুন। পান্ডাস ডকুমেন্টেশনগুলি কীভাবে এটি মোকাবেলা করতে হবে সে সম্পর্কে স্পষ্টভাবে রূপরেখা দেয়।
টেনেসি লিউউইনবুর্গ

3
পান্ডা ব্যবহার করার কোনও উপায় আছে তবে র‌্যাম ব্যবহার না করে ?, আমার কাছে একটি বিশাল .csv (7gb) আছে যা আমি ডেটাফ্রেম হিসাবে আমদানি করতে পারি না এবং তারপরে ডিবিতে সংযুক্ত করি।
পাবলো

1
হ্যাঁ, পান্ডাসে একটি পদ্ধতি রয়েছে যা একবারে না হয়ে বরং খণ্ডে পড়বে। আমি ভয় করি আমার মাথার উপরের অংশটি ঠিক মনে করতে পারছি না। আমার মনে হয় আপনি চুনসাইজ = <নাম্বার_অফ_স> যোগ করেছেন এবং তারপরে আপনি একটি পুনরাবৃত্তি ফিরিয়ে আনবেন যা আপনি কোনও ডাটাবেসে টুকরোক্তভাবে সংযুক্ত করতে ব্যবহার করতে পারেন। আপনার যদি এটি খুঁজে পেতে সমস্যা হয় এবং আমাকে একটি রেসিপি খনন করতে পারি তা আমাকে জানান।
টেনেসি লিউউইনবুর্গ

1
খুব সুন্দর, @ টেনেসিলিউউইনবুর্গ। আমার কোনও প্রয়োজন নেই dfতাই আমি আপনার উদাহরণটি নীচে এইভাবে সংক্ষিপ্ত করে দিয়েছি:pandas.read_csv(csvfile).to_sql(table_name, conn, if_exists='append', index=False)
কেইথপজল্লি

13

আমার 2 সেন্ট (আরও জেনেরিক):

import csv, sqlite3
import logging

def _get_col_datatypes(fin):
    dr = csv.DictReader(fin) # comma is default delimiter
    fieldTypes = {}
    for entry in dr:
        feildslLeft = [f for f in dr.fieldnames if f not in fieldTypes.keys()]
        if not feildslLeft: break # We're done
        for field in feildslLeft:
            data = entry[field]

            # Need data to decide
            if len(data) == 0:
                continue

            if data.isdigit():
                fieldTypes[field] = "INTEGER"
            else:
                fieldTypes[field] = "TEXT"
        # TODO: Currently there's no support for DATE in sqllite

    if len(feildslLeft) > 0:
        raise Exception("Failed to find all the columns data types - Maybe some are empty?")

    return fieldTypes


def escapingGenerator(f):
    for line in f:
        yield line.encode("ascii", "xmlcharrefreplace").decode("ascii")


def csvToDb(csvFile, outputToFile = False):
    # TODO: implement output to file

    with open(csvFile,mode='r', encoding="ISO-8859-1") as fin:
        dt = _get_col_datatypes(fin)

        fin.seek(0)

        reader = csv.DictReader(fin)

        # Keep the order of the columns name just as in the CSV
        fields = reader.fieldnames
        cols = []

        # Set field and type
        for f in fields:
            cols.append("%s %s" % (f, dt[f]))

        # Generate create table statement:
        stmt = "CREATE TABLE ads (%s)" % ",".join(cols)

        con = sqlite3.connect(":memory:")
        cur = con.cursor()
        cur.execute(stmt)

        fin.seek(0)


        reader = csv.reader(escapingGenerator(fin))

        # Generate insert statement:
        stmt = "INSERT INTO ads VALUES(%s);" % ','.join('?' * len(cols))

        cur.executemany(stmt, reader)
        con.commit()

    return con

1
যদি লেন (feildslLeft)> 0: সর্বদা সত্য, তাই একটি ব্যতিক্রম উত্থাপন। দয়া করে এটি পর্যালোচনা করুন এবং সংশোধন করুন।
amu61

() সন্ধান না করে এটি করার কোনও উপায়, যাতে এটি স্ট্রিমগুলিতে ব্যবহার করা যায়?
mwag

1
@ এমওয়াগ আপনি কলামের প্রকারের চেকিং এড়িয়ে যেতে পারেন এবং কলামগুলি পরিবর্তে সমস্ত পাঠ্য হিসাবে আমদানি করতে পারেন।
ব্যবহারকারী5359531

12

.importকমান্ড sqlite3 কম্যান্ড-লাইন টুল একটি বৈশিষ্ট্য। পাইথনে এটি করার জন্য, পাইথনের যাবতীয় সুবিধাদি যেমন সিএসভি মডিউল ব্যবহার করে এবং যথারীতি ডেটা সন্নিবেশ করিয়ে আপনার সহজেই ডেটা লোড করা উচিত ।

এইভাবে, স্ক্লাইট 3 এর আপাতদৃষ্টিতে অনির্ধারিত আচরণের উপর নির্ভর না করে কী ধরণের সন্নিবেশ করা হবে তার উপরও আপনার নিয়ন্ত্রণ রয়েছে।


1
সন্নিবেশ প্রস্তুত করার দরকার নেই। এসকিউএল বিবৃতিগুলির উত্স এবং সংকলিত ফলাফলগুলি একটি ক্যাশে রাখা হয়।
জন মাচিন

@ জন মেশিন: এসকিউএলাইট এটি করে কীভাবে কোনও লিঙ্ক আছে?
মার্সেলো ক্যান্টোস

@ মার্সেলো: আপনি কীভাবে এটি সম্পন্ন করতে আগ্রহী হন (কেন?), স্ক্লাইট উত্সটি অনুসন্ধান করুন বা স্ক্লাইট মেলিং তালিকায় জিজ্ঞাসা করুন।
জন মাচিন

@ জন ম্যাকিন: আমি আগ্রহী কারণ সমস্ত এসকিউএলাইট ডকুমেন্টেশনে যে আমি এসেছি, অপ্রত্যাশিত বিবৃতিগুলির স্বয়ংক্রিয়ভাবে ক্যাচিংয়ের জন্য একটি শব্দও নেই। আমার এসকিউএল স্টেটমেন্ট প্রস্তুত করা উচিত কিনা সে হিসাবে মৌলিক হিসাবে কিছু আবিষ্কার করার জন্য সোর্স কোড পড়ার বা মেলিং তালিকাগুলি পড়া যুক্তিসঙ্গত বলে আমি মনে করি না। এ সম্পর্কে আপনার তথ্যের উত্স কী?
মার্সেলো ক্যান্টোস

4
@ মার্সেলো: আসলে এটি পাইথন স্ক্লাইট 3 র‌্যাপার মডিউলে সম্পন্ন হয়েছে। docs.python.org/library/... বলে "" "sqlite3 মডিউল অভ্যন্তরীণভাবে এড়ানোর জন্য SQL ওভারহেড পার্স করার জন্য একটি বিবৃতি ক্যাশে ব্যবহার করে। আপনি স্পষ্টভাবে যে সংযোগের জন্য ক্যাশে করার বিবৃতি সংখ্যা সেট করতে চান, তাহলে আপনি cached_statements প্যারামিটার সেট করতে পারেন "বর্তমানে বাস্তবায়িত ডিফল্টটি 100 টি স্টেটমেন্ট ক্যাশে করা" ""
জন মাচিন

9
#!/usr/bin/python
# -*- coding: utf-8 -*-

import sys, csv, sqlite3

def main():
    con = sqlite3.connect(sys.argv[1]) # database file input
    cur = con.cursor()
    cur.executescript("""
        DROP TABLE IF EXISTS t;
        CREATE TABLE t (COL1 TEXT, COL2 TEXT);
        """) # checks to see if table exists and makes a fresh table.

    with open(sys.argv[2], "rb") as f: # CSV file input
        reader = csv.reader(f, delimiter=',') # no header information with delimiter
        for row in reader:
            to_db = [unicode(row[0], "utf8"), unicode(row[1], "utf8")] # Appends data from CSV file representing and handling of text
            cur.execute("INSERT INTO neto (COL1, COL2) VALUES(?, ?);", to_db)
            con.commit()
    con.close() # closes connection to database

if __name__=='__main__':
    main()

9

বার্নির উত্তরের জন্য অনেক ধন্যবাদ ! এটিকে কিছুটা টুইট করতে হয়েছিল - আমার জন্য যা কাজ করেছে তা এখানে:

import csv, sqlite3
conn = sqlite3.connect("pcfc.sl3")
curs = conn.cursor()
curs.execute("CREATE TABLE PCFC (id INTEGER PRIMARY KEY, type INTEGER, term TEXT, definition TEXT);")
reader = csv.reader(open('PC.txt', 'r'), delimiter='|')
for row in reader:
    to_db = [unicode(row[0], "utf8"), unicode(row[1], "utf8"), unicode(row[2], "utf8")]
    curs.execute("INSERT INTO PCFC (type, term, definition) VALUES (?, ?, ?);", to_db)
conn.commit()

আমার পাঠ্য ফাইলটি (PC.txt) এর মতো দেখাচ্ছে:

1 | Term 1 | Definition 1
2 | Term 2 | Definition 2
3 | Term 3 | Definition 3

7

আপনি ঠিক বলেছেন .import সেটাই, তবে এটি এসকিউএলআইটিএসএক্স শেলের একটি কমান্ড। এই প্রশ্নের শীর্ষস্থানীয় উত্তরগুলিতে নেটিভ পাইথন লুপগুলি জড়িত, তবে যদি আপনার ফাইলগুলি বড় হয় (আমার 10 ^ 6 থেকে 10 ^ 7 রেকর্ড হয়), আপনি পান্ডাসে সমস্ত কিছু পড়তে বা নেটিভ পাইথন তালিকার বোঝা / লুপ ব্যবহার এড়াতে চান (যদিও আমি তুলনার জন্য তাদের সময় নিই না)।

বড় ফাইলগুলির জন্য, আমি বিশ্বাস করি যে সর্বোত্তম বিকল্পটি হ'ল আগাম খালি টেবিলটি তৈরি করে sqlite3.execute("CREATE TABLE...")আপনার সিএসভি ফাইলগুলি থেকে শিরোনামগুলি স্ট্রিপ করুন এবং তারপরে subprocess.run()স্ক্লাইটের আমদানি বিবৃতি কার্যকর করতে ব্যবহার করুন । যেহেতু শেষ অংশটি আমি সর্বাধিক প্রাসঙ্গিক বিশ্বাস করি, আমি এটি দিয়েই শুরু করব।

subprocess.run()

from pathlib import Path
db_name = Path('my.db').resolve()
csv_file = Path('file.csv').resolve()
result = subprocess.run(['sqlite3',
                         str(db_name),
                         '-cmd',
                         '.mode csv',
                         '.import '+str(csv_file).replace('\\','\\\\')
                                 +' <table_name>'],
                        capture_output=True)

ব্যাখ্যা
কমান্ড লাইন থেকে, আপনি যে আদেশটি সন্ধান করছেন তা হ'ল sqlite3 my.db -cmd ".mode csv" ".import file.csv table"subprocess.run()কমান্ড লাইন প্রক্রিয়া চালায়। যুক্তিটি subprocess.run()স্ট্রিংয়ের ক্রম যা এটিকে সমস্ত আর্গুমেন্ট অনুসরণ করে একটি আদেশ হিসাবে ব্যাখ্যা করা হয়।

  • sqlite3 my.db ডাটাবেস খোলে
  • -cmdডাটাবেস পরে ফ্ল্যাগ আপনাকে স্ক্লাইট প্রোগ্রামে কমান্ডে একাধিক অনুসরণ করতে দেয়। শেলটিতে প্রতিটি কমান্ডের উদ্ধৃতি থাকতে হবে, তবে এখানে তাদের ক্রমের নিজস্ব উপাদান হওয়া দরকার
  • '.mode csv' আপনি যা আশা করেন তা করে
  • '.import '+str(csv_file).replace('\\','\\\\')+' <table_name>'আমদানি কমান্ড হয়।
    দুর্ভাগ্যক্রমে, যেহেতু সাবপ্রসেসগুলি সমস্ত ফলো-অনগুলি -cmdউদ্ধৃত স্ট্রিং হিসাবে পাস করে, আপনার যদি উইন্ডো ডিরেক্টরি পথ থাকে তবে আপনার ব্যাকস্ল্যাশগুলি দ্বিগুণ করতে হবে।

স্ট্রিপিং শিরোনাম

আসলেই প্রশ্নের মূল বিষয় নয়, তবে আমি এখানে যা ব্যবহার করেছি তা এখানে। আবার, আমি কোনও মুহুর্তে পুরো ফাইলগুলি মেমোরিতে পড়তে চাইনি:

with open(csv, "r") as source:
    source.readline()
    with open(str(csv)+"_nohead", "w") as target:
        shutil.copyfileobj(source, target)

4

গাই এল সমাধানের ভিত্তিতে (এটি পছন্দ করুন) তবে পালানো ক্ষেত্রগুলি পরিচালনা করতে পারে।

import csv, sqlite3

def _get_col_datatypes(fin):
    dr = csv.DictReader(fin) # comma is default delimiter
    fieldTypes = {}
    for entry in dr:
        feildslLeft = [f for f in dr.fieldnames if f not in fieldTypes.keys()]        
        if not feildslLeft: break # We're done
        for field in feildslLeft:
            data = entry[field]

            # Need data to decide
            if len(data) == 0:
                continue

            if data.isdigit():
                fieldTypes[field] = "INTEGER"
            else:
                fieldTypes[field] = "TEXT"
        # TODO: Currently there's no support for DATE in sqllite

    if len(feildslLeft) > 0:
        raise Exception("Failed to find all the columns data types - Maybe some are empty?")

    return fieldTypes


def escapingGenerator(f):
    for line in f:
        yield line.encode("ascii", "xmlcharrefreplace").decode("ascii")


def csvToDb(csvFile,dbFile,tablename, outputToFile = False):

    # TODO: implement output to file

    with open(csvFile,mode='r', encoding="ISO-8859-1") as fin:
        dt = _get_col_datatypes(fin)

        fin.seek(0)

        reader = csv.DictReader(fin)

        # Keep the order of the columns name just as in the CSV
        fields = reader.fieldnames
        cols = []

        # Set field and type
        for f in fields:
            cols.append("\"%s\" %s" % (f, dt[f]))

        # Generate create table statement:
        stmt = "create table if not exists \"" + tablename + "\" (%s)" % ",".join(cols)
        print(stmt)
        con = sqlite3.connect(dbFile)
        cur = con.cursor()
        cur.execute(stmt)

        fin.seek(0)


        reader = csv.reader(escapingGenerator(fin))

        # Generate insert statement:
        stmt = "INSERT INTO \"" + tablename + "\" VALUES(%s);" % ','.join('?' * len(cols))

        cur.executemany(stmt, reader)
        con.commit()
        con.close()

4

আপনি এই ব্যবহার করতে পারেন blaze& odoদক্ষতার

import blaze as bz
csv_path = 'data.csv'
bz.odo(csv_path, 'sqlite:///data.db::data')

ওডো data.dbস্কিমার আওতায় সিএসভি ফাইল (স্ক্লাইট ডাটাবেস) এ সঞ্চয় করবেdata

অথবা আপনি ব্যবহার odoসরাসরি ছাড়া blaze। উভয় উপায় ঠিক আছে। এই ডকুমেন্টেশন পড়ুন


2
bz সংজ্ঞায়িত করা হয়নি: পি
হোমস

এবং এটি সম্ভবত তার অভ্যন্তরীণ ত্রুটির কারণে এটি খুব পুরানো প্যাকেজ: অ্যাট্রিবিউটআরার: 'সাবডিগ্রাফ' অবজেক্টটির কোনও 'গুণ' নেই
হোলস

একই বৈশিষ্ট্য ত্রুটি পেয়েও: মনে হয় এটির জন্য গিটহাবের উপর মন্তব্য রয়েছে, যদিও
ব্যবহারকারী 14৯১৪১১১

2

সিএসভি ফাইলটি যদি অজগর প্রোগ্রামের অংশ হিসাবে আমদানি করা আবশ্যক, তবে সরলতা এবং দক্ষতার জন্য, আপনি os.systemনিম্নলিখিত দ্বারা প্রস্তাবিত লাইন বরাবর ব্যবহার করতে পারেন :

import os

cmd = """sqlite3 database.db <<< ".import input.csv mytable" """

rc = os.system(cmd)

print(rc)

মুল বক্তব্যটি হ'ল ডাটাবেসের ফাইলের নাম নির্দিষ্ট করে, ডেটা স্বয়ংক্রিয়ভাবে সংরক্ষণ করা হবে, ধরে নিবেন এটি পড়তে কোনও ত্রুটি নেই।


1
import csv, sqlite3

def _get_col_datatypes(fin):
    dr = csv.DictReader(fin) # comma is default delimiter
    fieldTypes = {}
    for entry in dr:
        feildslLeft = [f for f in dr.fieldnames if f not in fieldTypes.keys()]        
        if not feildslLeft: break # We're done
        for field in feildslLeft:
            data = entry[field]

        # Need data to decide
        if len(data) == 0:
            continue

        if data.isdigit():
            fieldTypes[field] = "INTEGER"
        else:
            fieldTypes[field] = "TEXT"
    # TODO: Currently there's no support for DATE in sqllite

if len(feildslLeft) > 0:
    raise Exception("Failed to find all the columns data types - Maybe some are empty?")

return fieldTypes


def escapingGenerator(f):
    for line in f:
        yield line.encode("ascii", "xmlcharrefreplace").decode("ascii")


def csvToDb(csvFile,dbFile,tablename, outputToFile = False):

    # TODO: implement output to file

    with open(csvFile,mode='r', encoding="ISO-8859-1") as fin:
        dt = _get_col_datatypes(fin)

        fin.seek(0)

        reader = csv.DictReader(fin)

        # Keep the order of the columns name just as in the CSV
        fields = reader.fieldnames
        cols = []

        # Set field and type
        for f in fields:
            cols.append("\"%s\" %s" % (f, dt[f]))

        # Generate create table statement:
        stmt = "create table if not exists \"" + tablename + "\" (%s)" % ",".join(cols)
        print(stmt)
        con = sqlite3.connect(dbFile)
        cur = con.cursor()
        cur.execute(stmt)

        fin.seek(0)


        reader = csv.reader(escapingGenerator(fin))

        # Generate insert statement:
        stmt = "INSERT INTO \"" + tablename + "\" VALUES(%s);" % ','.join('?' * len(cols))

        cur.executemany(stmt, reader)
        con.commit()
        con.close()

2
আপনার কোড সঠিকভাবে ফরম্যাট এবং কিছু ব্যাখ্যা যোগ করুন
এক্সিকিউটেবল

1

সরলতার স্বার্থে, আপনি আপনার প্রকল্পের মেকফিল থেকে sqlite3 কমান্ড লাইন সরঞ্জামটি ব্যবহার করতে পারেন।

%.sql3: %.csv
    rm -f $@
    sqlite3 $@ -echo -cmd ".mode csv" ".import $< $*"
%.dump: %.sql3
    sqlite3 $< "select * from $*"

make test.sql3তারপরে একটি বিদ্যমান টেস্ট.সিএসভি ফাইল থেকে একক টেবিল "পরীক্ষা" দিয়ে স্ক্লাইট ডাটাবেস তৈরি করে। তারপরে make test.dumpআপনি সামগ্রীগুলি যাচাই করতে পারেন ।


1

আমি খুঁজে পেয়েছি যে স্মৃতিশক্তি শেষ না হওয়ার জন্য সিএসভি থেকে ডেটাবেসে ডাটাবেস স্থানান্তরিত করার প্রয়োজন হতে পারে। এটি এইভাবে করা যেতে পারে:

import csv
import sqlite3
from operator import itemgetter

# Establish connection
conn = sqlite3.connect("mydb.db")

# Create the table 
conn.execute(
    """
    CREATE TABLE persons(
        person_id INTEGER,
        last_name TEXT, 
        first_name TEXT, 
        address TEXT
    )
    """
)

# These are the columns from the csv that we want
cols = ["person_id", "last_name", "first_name", "address"]

# If the csv file is huge, we instead add the data in chunks
chunksize = 10000

# Parse csv file and populate db in chunks
with conn, open("persons.csv") as f:
    reader = csv.DictReader(f)

    chunk = []
    for i, row in reader: 

        if i % chunksize == 0 and i > 0:
            conn.executemany(
                """
                INSERT INTO persons
                    VALUES(?, ?, ?, ?)
                """, chunk
            )
            chunk = []

        items = itemgetter(*cols)(row)
        chunk.append(items)
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.