python通过对象迭代来创建带有sqlalchemy的表

t5zmwmid  于 2021-06-20  发布在  Mysql
关注(0)|答案(2)|浏览(377)

我一直在尝试创建一个类,它允许我遍历列表或字典,并生成表和行。代码开始如下:

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()

我仍然会尝试构造它,这样它就可以使用字典或列表,如果是dict,则添加键作为表名。如果有人拥有该代码,我不会与您争论共享,但如果没有,我会在完成后发布。

kx7yvsdv

kx7yvsdv1#

下面的代码自动将数据插入一对多关系表集中。递归函数的行为类似于while循环(%timeit对这两个循环显示了相同的结果)我喜欢它在while循环上的外观。函数将索引到列表中的一个列表,我曾深入3次,但将循环修改为simply。这最初是为了推送列表,如下所示: 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)
lsmepo6l

lsmepo6l2#

使用 db.session.add / db.session.commit . db 对象从初始化 flask_sqlalchemy . 它不是db.session。

相关问题