【问题标题】:Postgresql add values to a column with a for loop (on Python)Postgresql 使用 for 循环向列添加值(在 Python 上)
【发布时间】:2017-08-14 12:21:34
【问题描述】:

我在我的 postgresql 表中添加了一个新列。 现在我想向这个新添加的列添加值。 我发现的唯一命令允许添加值,但不允许在列的选定行中添加值。 我想要的是:

cursor.execute('SELECT Column_name FROM Table_name')
rows = cursor.fetchall()
cursor.execute('ALTER TABLE Table_name ADD NewColumn_name type')
for row in rows:
     #Here I want to have a commands that adds a value (result of a function: func(row)) to every row of the new column, one by one something like: 

     NewColumn_name[i] = func(row)
     i = i+1

【问题讨论】:

  • 什么是主键或唯一列?
  • func 是做什么的?

标签: python sql postgresql psycopg2


【解决方案1】:

您需要在循环体中执行UPDATE 语句。而不是这个:

 NewColumn_name[i] = func(row)

尝试这样的事情 (documentation):

cursor.execute('UPDATE Table_name SET NewColumn_name = %s WHERE id = %s', (func(row),row[0]);

假设 Table_name 的第一行是主索引。

【讨论】:

  • 它实际上在开始时工作(我打印了新添加的值)位,而它在运行时以错误结束:SSL SYSCALL 错误:用 python 和 psycopg 检测到 EOF
  • 我想这不可能是由于内存问题,因为它们不超过 10000 个要与 UPDATE 查询一起添加的新值!
  • 你读过这个帖子吗? stackoverflow.com/questions/24130305/…
  • 是的,我做到了..而且我认为我仍然需要添加更多可用空间。添加这样的值是否比直接从 csv 文件添加它们需要更多空间?因为我删除了通常包含 5 行的整个表,并将其替换为只有 2 行的表......并且第一个我没有遇到任何内存问题
【解决方案2】:

你在找update吗?

update table_name
    set column_name = ?;

用您想要的值填写?(使用参数比修改查询字符串更可取)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-05
    相关资源
    最近更新 更多