Как можно безопасно скопировать данные из CSV в базу данных Postgres с помощью Flask-SQLAlchemy? - PullRequest
0 голосов
/ 07 ноября 2018

Я создал веб-приложение для ведения журнала выполнения во Flask, поддержанное базой данных Postgres посредством Flask-SQLalchemy и размещенное на Heroku.

Я хочу ввести данные предыдущих прогонов, которые я выполнял до того, как запустил приложение, сгенерированное формой Google. У меня есть CSV, структурированный как this . (У меня недостаточно очков репутации для встраивания изображения.)

И мои модели базы данных выглядят так:

#Users Model

class User(UserMixin, db.Model):
    id = db.Column(db.Integer, primary_key=True)
    username = db.Column(db.String(64), index=True, unique=True)
    email = db.Column(db.String(120), index=True, unique=True)
    password_hash = db.Column(db.String(128))
    runs = db.relationship('Run', backref='owner')

    def set_password(self, password):
        self.password_hash = generate_password_hash(password)

    def check_password(self, password):
        return check_password_hash(self.password_hash, password)

    def __repr__(self):
        return '<User {}>'.format(self.username)

#Runs Model

class Run(db.Model):
    id = db.Column(db.Integer(), primary_key=True)
    date_posted = db.Column(db.DateTime(), index = True, default = datetime.utcnow)
    distance = db.Column(db.Float())
    run_time = db.Column(db.Integer())
    calories_burned = db.Column(db.Integer())
    owner_id = db.Column(db.Integer, db.ForeignKey('user.id'))

    def __repr__(self):
        return '<Run {}>'.format(self.distance)

Я читал о команде COPY, доступной в Postgres, и знаком с чтением из CSV на python, но я никогда не писал raw sql.

Я хочу выяснить:

  1. Какой лучший способ переместить эти данные из моего CSV в мою базу данных?
  2. Как я могу гарантировать, что данные (особенно даты) вставляются в формате, который соответствует данным, уже присутствующим в базе данных?

Я ценю помощь!

...