Я создал базу данных и классы SQLite, объявил свои столбцы и пытаюсь заполнить их данными из файла CSV, который я импортировал в Pandas и преобразовал в словарь.
Затем я использовал MetaData из SQLAlchemy для отображения таблиц, а затем я сохраняю ссылку на таблицы «измерения» и «станции» в их соответствующие переменные таблицы.Наконец, я вставляю данные в таблицы, однако, когда я получаю первые пять значений моих вставленных данных (чтобы убедиться, что вставка работает), я ничего не получаю.Я в недоумении, что я пропускаю или делаю неправильно?
# Dependencies and boilerplate
import sqlalchemy
from sqlalchemy import Column, Float, Integer, String, Text
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy import create_engine, inspect, func, MetaData
engine = create_engine("sqlite:///Resources/hawaii.sqlite")
conn = engine.connect()
Base = declarative_base()
class Measurement(Base):
__tablename__ = "measurement"
id = Column(Integer, primary_key=True)
station = Column(Text)
date = Column(Text)
prcp = Column(Float)
tobs = Column(Integer)
def __repr__(self):
return f"id={self.id}, name={self.name}"
class Station(Base):
__tablename__ = "station"
id = Column(Integer, primary_key=True)
station = Column(Text)
name = Column(Text)
latitude = Column(Float)
longitude = Column(Float)
elevation = Column(Float)
def __repr__(self):
return f"id={self.id}, name={self.name}"
# Create a "Metadata" Layer That Abstracts our SQL Database
# ----------------------------------
Base.metadata.tables # Right now, this table only exists in python and not in the actual database
Base.metadata.create_all(engine) # Create the 2 tables within the database
# csv to df to dict.
cm_df = "resources/clean_measurements.csv"
cs_df = "resources/clean_stations.csv"
cm_df = pd.read_csv(cm_df)
cs_df = pd.read_csv(cs_df)
cm_df=cm_df.drop(['Unnamed: 0'], axis=1).reset_index(drop=True)
cs_df=cs_df.drop(['Unnamed: 0'], axis=1).reset_index(drop=True)
cm_dic = cm_df.to_dict(orient='records')
cs_dic = cs_df.to_dict(orient='records')
# Use MetaData from SQLAlchemy to reflect the tables
metadata = MetaData(bind=engine)
metadata.reflect()
# Populate SQLITE Table for Measurement_df
m_table = sqlalchemy.Table('measurement', metadata, autoload=True)
conn.execute(m_table.delete())
conn.execute(m_table.insert(), cm_dic)
# Populate SQLITE Table for stations_df
s_table= sqlalchemy.Table('station', metadata, autoload=True)
conn.execute(s_table.delete())
conn.execute(s_table.insert(), cs_dic)
conn.execute("select * from measurement Limit 5").fetchall()
>>> [(1,), (2,), (3,), (4,), (5,)]
conn.execute("select * from station limit 5").fetchall()
>>> [(1,), (2,), (3,), (4,), (5,)]