Skip to main content
We’ve updated our Terms of Service. A new AI Addendum clarifies how Stack Overflow utilizes AI interactions.
edited body
Source Link
Merlin
  • 25.9k
  • 44
  • 141
  • 213
import csv
import sqlite3

from glob import glob; from os.path import expanduser
conn = sqlite3.connect( # open "places.sqlite" from one of the Firefox profiles
    glob(expanduser('~/.mozilla/firefox/*/places.sqlite'))[0]
)
cursor = conn.cursor()
cursor.execute("select * from moz_places;")
#withwith open("out.csv", "w", newline='') as csv_file:  # Python 3 version    
with#with open("out.csv", "wb") as csv_file:              # Python 2 version
    csv_writer = csv.writer(csv_file)
    csv_writer.writerow([i[0] for i in cursor.description]) # write headers
    csv_writer.writerows(cursor)

PEP 249 (DB API 2.0) has more information about cursor.description.

import csv
import sqlite3

from glob import glob; from os.path import expanduser
conn = sqlite3.connect( # open "places.sqlite" from one of the Firefox profiles
    glob(expanduser('~/.mozilla/firefox/*/places.sqlite'))[0]
)
cursor = conn.cursor()
cursor.execute("select * from moz_places;")
#with open("out.csv", "w", newline='') as csv_file:  # Python 3 version    
with open("out.csv", "wb") as csv_file:              # Python 2 version
    csv_writer = csv.writer(csv_file)
    csv_writer.writerow([i[0] for i in cursor.description]) # write headers
    csv_writer.writerows(cursor)

PEP 249 (DB API 2.0) has more information about cursor.description.

import csv
import sqlite3

from glob import glob; from os.path import expanduser
conn = sqlite3.connect( # open "places.sqlite" from one of the Firefox profiles
    glob(expanduser('~/.mozilla/firefox/*/places.sqlite'))[0]
)
cursor = conn.cursor()
cursor.execute("select * from moz_places;")
with open("out.csv", "w", newline='') as csv_file:  # Python 3 version    
#with open("out.csv", "wb") as csv_file:              # Python 2 version
    csv_writer = csv.writer(csv_file)
    csv_writer.writerow([i[0] for i in cursor.description]) # write headers
    csv_writer.writerows(cursor)

PEP 249 (DB API 2.0) has more information about cursor.description.

added Python 3 code
Source Link
Cristian Ciupitu
  • 21k
  • 7
  • 56
  • 80
import csv
import sqlite3

from glob import glob; from os.path import expanduser
conn = sqlite3.connect( # open "places.sqlite" from one of the Firefox profiles
    glob(expanduser('~/.mozilla/firefox/*/places.sqlite'))[0]
)
cursor = conn.cursor()
cursor.execute("select * from moz_places;")
#with open("out.csv", "w", newline='') as csv_file:  # Python 3 version    
with open("out.csv", "wb") as csv_file:              # Python 2 version
    csv_writer = csv.writer(csv_file)
    csv_writer.writerow([i[0] for i in cursor.description]) # write headers
    csv_writer.writerows(cursor)

PEP 249 (DB API 2.0) has more information about cursor.description.

import csv
import sqlite3

from glob import glob; from os.path import expanduser
conn = sqlite3.connect( # open "places.sqlite" from one of the Firefox profiles
    glob(expanduser('~/.mozilla/firefox/*/places.sqlite'))[0]
)
cursor = conn.cursor()
cursor.execute("select * from moz_places;")

with open("out.csv", "wb") as csv_file:
    csv_writer = csv.writer(csv_file)
    csv_writer.writerow([i[0] for i in cursor.description]) # write headers
    csv_writer.writerows(cursor)

PEP 249 (DB API 2.0) has more information about cursor.description.

import csv
import sqlite3

from glob import glob; from os.path import expanduser
conn = sqlite3.connect( # open "places.sqlite" from one of the Firefox profiles
    glob(expanduser('~/.mozilla/firefox/*/places.sqlite'))[0]
)
cursor = conn.cursor()
cursor.execute("select * from moz_places;")
#with open("out.csv", "w", newline='') as csv_file:  # Python 3 version    
with open("out.csv", "wb") as csv_file:              # Python 2 version
    csv_writer = csv.writer(csv_file)
    csv_writer.writerow([i[0] for i in cursor.description]) # write headers
    csv_writer.writerows(cursor)

PEP 249 (DB API 2.0) has more information about cursor.description.

changed DB filename to make the program more ready to run on Unix like platforms; open CSV file using with; changed link to point directly to the description field
Source Link
Cristian Ciupitu
  • 21k
  • 7
  • 56
  • 80
import csv
import sqlite3

from glob import glob; from os.path import expanduser
conn = sqlite3.connect("Firefox/. # open "places.sqlite" from one of the Firefox profiles
    glob(expanduser('~/.mozilla/permissionsfirefox/*/places.sqlite"sqlite'))[0]
)
cursor = conn.cursor()
cursor.execute("select * from moz_hosts;"moz_places;")

csv_writer =with csv.writer(open("out.csv", "wb") as csv_file:
    csv_writer = csv.writer(csv_file)
    csv_writer.writerow([i[0] for i in cursor.description]) # write headers
    csv_writer.writerows(cursor)
del csv_writer # this will close the CSV file

PEP 249 (DB API 2.0)PEP 249 (DB API 2.0) has more information about (cursor)cursor.description.

import csv
import sqlite3

conn = sqlite3.connect("Firefox/.../permissions.sqlite")
cursor = conn.cursor()
cursor.execute("select * from moz_hosts;")

csv_writer = csv.writer(open("out.csv", "wb"))
csv_writer.writerow([i[0] for i in cursor.description]) # write headers
csv_writer.writerows(cursor)
del csv_writer # this will close the CSV file

PEP 249 (DB API 2.0) has more information about (cursor).description.

import csv
import sqlite3

from glob import glob; from os.path import expanduser
conn = sqlite3.connect( # open "places.sqlite" from one of the Firefox profiles
    glob(expanduser('~/.mozilla/firefox/*/places.sqlite'))[0]
)
cursor = conn.cursor()
cursor.execute("select * from moz_places;")

with open("out.csv", "wb") as csv_file:
    csv_writer = csv.writer(csv_file)
    csv_writer.writerow([i[0] for i in cursor.description]) # write headers
    csv_writer.writerows(cursor)

PEP 249 (DB API 2.0) has more information about cursor.description.

csv.writer documentatation says that the output file "must be opened with the ‘b’ flag on platforms where that makes a difference"
Source Link
Cristian Ciupitu
  • 21k
  • 7
  • 56
  • 80
Loading
write all rows in one step (suggested by user428862)
Source Link
Cristian Ciupitu
  • 21k
  • 7
  • 56
  • 80
Loading
Bounty Awarded with 50 reputation awarded by Merlin
cosmetic changes
Source Link
Cristian Ciupitu
  • 21k
  • 7
  • 56
  • 80
Loading
cosmetic changes
Source Link
Cristian Ciupitu
  • 21k
  • 7
  • 56
  • 80
Loading
add explaination about "cursor.description"
Source Link
Cristian Ciupitu
  • 21k
  • 7
  • 56
  • 80
Loading
added a comment to the code
Source Link
Cristian Ciupitu
  • 21k
  • 7
  • 56
  • 80
Loading
Source Link
Cristian Ciupitu
  • 21k
  • 7
  • 56
  • 80
Loading