Python Forum
Create multiple/single csv file for each sql records
Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
Create multiple/single csv file for each sql records
#7
This
        for idx, row in enumerate(crsr, start=1):
            writer.writerows(crsr)
should be just

writer.writerows(crsr)
With your current code it will write n*n number of rows, where the n is number of rows returned. Actually it will write it only once (i.e. n rows), because crsr will be exhausted after first run. Still better fix it.

If there are no rows returned it will write empty file, with just header.
There is option to use crsr.rowcount, BUT note there are limitations:

Quote:rowcount

The number of rows modified by the last SQL statement.

This is -1 if no SQL has been executed or if the number of rows is unknown. Note that it is not uncommon for databases to report -1 immediately after a SQL select statement for performance reasons. (The exact number may not be known before the first records are returned to the application.)

You can try fetchone record, then check if anything is returned, write to the file and then write all the remaining records in one go (i.e. the crsr not yet consumed).
not tested:

import pyodbc
import csv
import os
 
connection = pyodbc.connect(
    'DRIVER={ODBC Driver 17 for SQL Server};SERVER=DESKTOP-GQK64O6;DATABASE=Customer;Trusted_Connection=yes;')
with connection.cursor() as crsr:
    qry = "Select * from employee"
    crsr.execute(qry)
    first_record = crsr.fetchone()

    if first_record:
        folderPath = "C:\\Users\\malle\\OneDrive\\Desktop\\C\\test_data\\output"
        header = next(zip(*crsr.description))

        fname = "main.csv"
        fullpath = os.path.join(folderPath, fname)
        with open(fullpath, "w", newline="") as outfile:
            writer = csv.writer(outfile, delimiter="|", quoting=csv.QUOTE_NONNUMERIC)
            writer.writerows([header, first_record])
            writer.writerows(crsr)
    else:
        print('No records')
If you can't explain it to a six year old, you don't understand it yourself, Albert Einstein
How to Ask Questions The Smart Way: link and another link
Create MCV example
Debug small programs

Reply


Messages In This Thread
RE: Create multiple/single csv file for each sql records - by buran - Sep-29-2022, 08:06 AM
Extract sql table data into CSV - by mg24 - Sep-29-2022, 05:22 AM

Possibly Related Threads…
Thread Author Replies Views Last Post
  Create Choices from .ods file columns cspower 3 644 Dec-28-2023, 09:59 PM
Last Post: deanhystad
  Recommended way to read/create PDF file? Winfried 3 2,937 Nov-26-2023, 07:51 AM
Last Post: Pedroski55
  Use PM4PY and create working file thomaskissas33 0 705 Nov-14-2023, 06:53 AM
Last Post: thomaskissas33
  Create csv file with 4 columns for process mining thomaskissas33 3 796 Nov-06-2023, 09:36 PM
Last Post: deanhystad
  create exe file for linux? korenron 2 993 Mar-22-2023, 01:42 PM
Last Post: korenron
  validate large json file with millions of records in batches herobpv 3 1,306 Dec-10-2022, 10:36 PM
Last Post: bowlofred
  my first file won't create itself MehHz2526 2 920 Nov-27-2022, 12:58 AM
Last Post: MehHz2526
  python Multithreading on single file mg24 3 1,786 Nov-05-2022, 01:33 PM
Last Post: snippsat
  Reshaping a single column in to multiple column using Python sahar 7 2,101 Jun-20-2022, 12:35 PM
Last Post: deanhystad
Sad pandas writer create "corrupted" file freko75 1 2,856 Jun-14-2022, 09:57 PM
Last Post: snippsat

Forum Jump:

User Panel Messages

Announcements
Announcement #1 8/1/2020
Announcement #2 8/2/2020
Announcement #3 8/6/2020