De forma modular: un ejemplo que utiliza slqalchemy con automap y mysql.
database.py:
from sqlalchemy.ext.automap import automap_base
from sqlalchemy.orm import Session
from sqlalchemy import create_engine
Base = automap_base()
engine = create_engine('mysql://user:[email protected]:3306/database_name', echo=True)
Base.prepare(engine, reflect=True)
# Map the tables
State = Base.classes.states
session = Session(engine, autoflush=False)
export_to_csv.py:
from databases import *
import csv
def export():
q = session.query(State)
file = './data/states.csv'
with open(file, 'w') as csvfile:
outcsv = csv.writer(csvfile, delimiter=',',quotechar='"', quoting = csv.QUOTE_MINIMAL)
header = State.__table__.columns.keys()
outcsv.writerow(header)
for record in q.all():
outcsv.writerow([getattr(record, c) for c in header ])
if __name__ == "__main__":
export()
Resultados:
nombre, ABV, país, is_state, is_lower48, babosa, latitud, longitud, población, área Alaska, AK, EE. UU., y, n, alaska, 61.370716, -152.404419,710231,571951.25 Alabama, AL, EE. UU., y, y, alabama, 32.806671, -86.79113,4779736,50744.0 Arkansas, AR, EE. UU., Y, y, arkansas, 34.969704, -92.373123,2915918,52068.17 Arizona, AZ, EE. UU., Y, y, arizona, 33.729759, -111.431221,6392017,113634.57 California, CA, EE. UU., Y , y, california, 36.116203, -119.681564,37253956,155939.52 Colorado, CO, EE. UU., y, y, colorado, 39.059811, -105.311104,5029196,103717.53 Connecticut, CT, EE. UU., y, y, connecticut, 41.597782, - 72.755371,3574097,4844.8 District of Columbia, DC, EE. UU., N, n, district-of-columbia, 38.897438, -77.026817,601723,68.34 Delaware, DE, US, y, y, delaware, 39.318523, -75.507141, 897934,1953.56 Florida, FL, Estados Unidos, y, y, la florida, 27.766279, -81.686783,18801310,53926.82 Georgia, GA, Estados Unidos, y, y, Georgia, 33.040619, -83.643074,9687653,57906.14
Sólo una pequeño rema rk: 'outcsv.writerows (records)' dará como resultado un 'Error: sequence expected' – miku
También puede obtener todas las columnas a la vez usando el' __mapper__' [atributo] (http://www.sqlalchemy.org/docs /orm/extensions/declarative.html#synopsis), así: '[outcsv.writerow ([getattr (curr, column.name) para la columna en MyModel .__ mapper__.columnas]) para curr en registros] ' – miku
Para agregar una fila de encabezado inicial para describir las columnas, use: ' outcsv.writerow ([column.name para la columna en MyModel .__ mapper __. columns]) ' – bschwagg