Python перебирает объект для создания таблиц с Flask-SQLAlchemy - PullRequest
0 голосов
/ 06 сентября 2018

EDITED Я пытался создать класс, который позволит мне перебирать список или словарь и генерировать таблицы и строки. Код начинается следующим образом:

from flask_sqlalchemy import SQLAlchemy as sa
from flask import Flask as fl
import pymysql
pymysql.install_as_MySQLdb()

app = fl(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql://root:the_other_stuff'
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] =False
DEBUG =True
db = sa(app)

a=['some_stuff','gaaahhhh','lalala','rawr','pizza']

class test(db.Model):
    __tablename__ = 'stuff'
    id = db.Column('id', db.Integer, primary_key = True)
    data = db.Column('data', db.Unicode(50))

    def __init__(self, id, data):
        self.id = id
        self.data = data

def stuff():
    for i in range(len(a)):
        data= a[i]
        i = i + 1
        id = i
        db.session.add(test(id,data))
    db.create_all()
    return db.session.commit()
stuff()

Я все еще собираюсь попытаться структурировать его так, чтобы он мог принимать словарь или список, а затем добавить ключ в качестве имени таблицы, если это диктат. Если у кого-то есть этот код, я не буду спорить с вами, когда делюсь, но если нет, я опубликую, когда это будет сделано.

Ответы [ 2 ]

0 голосов
/ 22 сентября 2018

Приведенный ниже код автоматически вставляет данные в набор таблиц отношений «один ко многим». Рекурсивная функция действует как цикл while (% timeit показал одинаковые результаты для обоих) Мне просто нравится, как он выглядит через цикл while. Функция будет индексировать список в списке, я углубился в 3, но изменил циклы на просто. Первоначально он был разработан, чтобы выдвигать список следующим образом: list[a][i][0] каждый нулевое значение внутри каждого [i] было одного и того же типа значения, я установил его только на [a][i], чтобы сделать его немного более простым, и поэтому его можно использовать в качестве базового, если кому-то это нравится. [a][i][0] был очень быстрым, но [a][i] может быть лучше в виде списка pd.DataFrame, чем np.array. Если [i] не совпадает с db.Column(), вам придется объявить по одному для каждого набора [i] и найти способ индексации через него.
Генератор таблиц включает в себя генератор классов с базовым классом. У меня нет рабочего примера, но я могу загрузить, когда я делаю

import numpy as np
from flask_sqlalchemy import SQLAlchemy as sa
from flask import Flask as fl
import pymysql
pymysql.install_as_MySQLdb()

app = fl(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql://root:the_other_stuff'
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] =False
DEBUG =True
db = sa(app)

list=[np.array(np.ones(100)),np.array(np.ones(100)),np.array(np.ones(100)),
      np.array(np.ones(100)),np.array(np.ones(100))]

class Parent(db.Model):

    id = db.Column('id', db.Integer, primary_key=True)
    data= db.Column('data', db.VARCHAR(45))

    _child = db.relationship('child', backref='parent', lazy=True)

    def __init__(self, data):
        self.data = data

    def __repr__(self):
        return '<Parent %r>' % self.id

class Child(db.Model):

    id = db.Column('id', db.Integer, primary_key = True)
    data = db.Column('data', db.VARCHAR(45))
    parent_id = db.Column(db.Integer, db.ForeignKey('Parent.id'))
    parent = db.relationship('Parent')

    def __init__(self,data):
        self.data = data

    def __repr__(self):
        return '<Child %r>' % self.id


def child_loop(i = 0):
    for a in range(len(list)):
        with db.session.no_autoflush:
            try:
                p = Parent(symbol_col=data[a])
                c = child(data = list[a][i])
                s.c.append(child)
                db.session.add(p)
                db.session.add(c)

            except exc.IntegrityError as e:
                db.session.rollback()

    i = i + 1
    if a < len(list[0]):
        child_loop(i = i)
    return print('inserted open_close')
child_loop(i=0)
0 голосов
/ 06 сентября 2018

использовать db.session.add / db.session.commit. db объект инициализируется с flask_sqlalchemy. Это не дБ. Сессия .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...