【问题标题】:sqlalchemy : Column must be constructed with a non-blank namesqlalchemy :必须使用非空名称构造列
【发布时间】:2020-11-05 21:52:36
【问题描述】:

我尝试将新记录插入到 amazon redshift 上的表中。 基本上我从谷歌电子表格下载行并尝试作为数据框推送到表格中。

from sqlalchemy import create_engine
engine = create_engine('postgresql://redshift_user:password,GB8@redshift-url:5439/datawarehouse')
connection = engine.raw_connection()

然后我执行

df.to_sql(name='test',con=engine, if_exists='append', index=False)

但它不起作用并引发异常

sqlalchemy.exc.ArgumentError: Column must be constructed with a non-blank name or assign a non-blank .name before adding to a Table.

我查看了一些帖子并尝试了他们的解决方案,但仍然无法正常工作

【问题讨论】:

  • 也许可以尝试创建一个继承 SQLAlchemy.Module 的 Table 类?不过,我只是 SQLAlchemy 的初学者。
  • 嗯,你有这个例子吗?我也是 SQLAlchemy 的新手
  • 我主要使用flask-sqlalchemy
  • df 数据框是否有未命名的列(或多级列名)?您可以通过print(df.columns) 看到

标签: python postgresql sqlalchemy amazon-redshift


【解决方案1】:

试试这个:

import SQLAlchemy sqla

db_uri = ''
db = sqla.create_engine('postgresql://file.db')


class Table(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    username = db.Column(db.String(20), unique=True, nullable=False)

    def __repr__(self):
        return f'USER[{self.id}, {self.name]'
db.create_all()
user1 = Table(username='User1')
db.session.add(user1)
db.session.commit()

警告你必须调试这个...我只使用 Flask + SQLAlchemy。

【讨论】:

    【解决方案2】:

    感谢您的帮助。

    原来我的数据框中有一个空列,一开始我没有注意到导致错误。 一旦我修复了从谷歌表的导入,对数据库的解析也可以工作

    【讨论】:

      猜你喜欢
      • 2023-01-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-11-26
      • 1970-01-01
      • 2022-10-23
      • 2017-07-11
      相关资源
      最近更新 更多