python - 如何动态创建 SQLAlchemy 列

标签 python sqlalchemy dynamic-data

<分区>

我有一个 csv 文件,第一行作为字段,其余行作为数据。我想用这个文件创建一个表。由于字段很长并且可能会有所不同,因此我想动态创建它。 经过几次尝试和搜索,我想我也许可以从工厂生成一个类,然后将属性分配给新类可以生成动态列。但它失败了。并且根据这个错误,我尝试了一些其他的方法,都失败了。请帮忙。我在考虑这样的想法是否可行。

Reader = csv.reader(open('Book1.csv', 'rb'), delimiter=',', quotechar='|')
TableItem = Reader.next()[0:]
def Factory(*args, **kwargs):
    args=args[0]
    def init(self, *iargs, **ikwargs):
        #setattr(self,__tablename__,ikwargs[__tablename__])
        for k,v in kwargs.items():
            setattr(self, k, v)
        for i in range(len(iargs)):
            setattr(self, args[i], iargs[i])
        for k,v in ikwargs.items():
            setattr(self, k, v)

    name = kwargs.pop("name", "myFactory")
    kwargs.update(dict((k, None) for k in args))
    return type(name, (object,), {'__init__': init})

LIS=Factory(TableItem)
class newLIS(LIS,Base):
    __tablename__='testonly'
    pass
mytest=[]
for row in Reader:
    mytest.append(newLIS(row))

错误是这样的:

sqlalchemy.exc.ArgumentError: Mapper Mapper|newLIS|testonly could not assemble
any primary key columns for mapped table 'testonly'

最佳答案

我是相关答案的作者:

sqlalchemy dynamic mapping

我对另一个问题有这个答案,我认为这个问题更相关 - 它甚至可能是重复的:

Database on the fly with scripting languages

如您所见,要实现它,您需要创建一个表对象并将其映射到您的类。此外,sqlalchemy 中的映射类需要表上的主键,因此您必须添加一个。除此之外你还有什么问题吗?如果是这样,您可以粘贴更新后的代码吗?

关于python - 如何动态创建 SQLAlchemy 列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4678115/

相关文章:

c# - 动态内容 ASP.net C#

python - 如何按列表对sqlalchemy中的数据进行排序

python - SQLAlchemy .all() 只返回多连接的第一个结果

python - 使用 sqlalchemy create_engine 配置查询/命令超时?

c# - 如何构建 IEnumerable<int>.Contains() 表达式?

java - 保存大量动态用户输入

python - 在 windows 中编写的 python 代码可以在 linux 中运行吗?

python - Django 访问 ForeignKey 模型对象

python - 如何在html中添加动态内容以在Python中发送邮件

python - 使用循环从 CSV 获取数据数组