Приведенный ниже код автоматически вставляет данные в набор таблиц отношений «один ко многим». Рекурсивная функция действует как цикл 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)