相关疑难解决方法(0)

如何使用Postgres中的CSV文件中的值更新选定的行?

我正在使用Postgres,并希望进行一个从CSV文件中获取的大更新查询,假设我得到了一张表(id, banana, apple).

我想运行一个更新香蕉而不是苹果的更新,每个新香蕉及其ID都将在CSV文件中.

我试着查看Postgres网站,但是这些例子正在扼杀我.

sql database csv postgresql file-io

64
推荐指数
1
解决办法
8万
查看次数

Rails迁移:尝试将列的类型从字符串更改为整数

我在rails应用程序中使用rails generate migrations命令创建了一个表.这是迁移文件:

class CreateListings < ActiveRecord::Migration
  def change
    create_table :listings do |t|
      t.string :name
      t.string :telephone
      t.string :latitude
      t.string :longitude

      t.timestamps
    end
  end
end
Run Code Online (Sandbox Code Playgroud)

然后我想将纬度和经度存储为整数,所以我试图运行:

rails generate migration changeColumnType
Run Code Online (Sandbox Code Playgroud)

并且该文件的内容是:

class ChangeColumnType < ActiveRecord::Migration
  def up
    #change latitude columntype from string to integertype
    change_column :listings, :latitude, :integer
    change_column :listings, :longitude, :integer
    #change longitude columntype from string to integer type
  end

  def down  
  end
end
Run Code Online (Sandbox Code Playgroud)

我期待列类型改变但是rake被中止并且出现以下错误消息.我想知道为什么这不通过?我在我的应用程序中使用postgresql.

rake db:migrate
==  ChangeColumnType: migrating ===============================================
-- change_column(:listings, :latitude, :integer)
rake aborted!
An error …
Run Code Online (Sandbox Code Playgroud)

ruby postgresql casting ruby-on-rails rails-migrations

30
推荐指数
4
解决办法
3万
查看次数

postgresql临时表的线程安全性

这是我用于创建临时表的语法:

create temp table tmpTable (id bigint not null, primary key (id)) on commit drop;
Run Code Online (Sandbox Code Playgroud)

我知道这意味着在每个事务结束时,此表将被删除.我的问题是,如果同一会话中的两个或多个线程创建并将值插入临时表,它们每个都会获得自己的实例,还是整个会话中共享的临时实例?如果它是共享的,有没有办法让它在每个线程本地?

谢谢Netta

java postgresql

5
推荐指数
1
解决办法
2879
查看次数

写入CSV时如何保持空值

我正在使用Python的csv模块将数据从sql server写入csv文件,然后使用copy命令将csv文件上传到postgres数据库。问题是Python的csv编写器自动将Nulls转换为空字符串“”,并且当列为int或float数据类型时,它使我的工作失败,并且当它应为None或null值时,它将尝试插入此“”。

为了尽可能容易地与实现DB API的模块接口,将值None写为空字符串。

https://docs.python.org/3.4/library/csv.html?highlight=csv#csv.writer

保留空值的最佳方法是什么?有没有更好的方法用Python编写csv?我愿意接受所有建议。

例:

我有纬度和经度值:

42.313270000    -71.116240000
42.377010000    -71.064770000
NULL    NULL
Run Code Online (Sandbox Code Playgroud)

写入csv时,会将null转换为“”:

with file_path.open(mode='w', newline='') as outfile:
    csv_writer = csv.writer(outfile, delimiter=',', quoting=csv.QUOTE_NONNUMERIC)
    if include_headers:
        csv_writer.writerow(col[0] for col in self.cursor.description)
    for row in self.cursor:
        csv_writer.writerow(row)
Run Code Online (Sandbox Code Playgroud)

42.313270000,-71.116240000
42.377010000,-71.064770000
"",""
Run Code Online (Sandbox Code Playgroud)

空值

指定表示空值的字符串。默认值为文本格式\ N(反斜杠-N),以及CSV格式的无引号的空字符串。对于不想将空值与空字符串区分开的情况,甚至可能以文本格式使用空字符串。使用二进制格式时,不允许使用此选项。

https://www.postgresql.org/docs/9.2/sql-copy.html

回答:

对我来说解决问题的是将报价更改为csv.QUOTE_MINIMAL。

csv.QUOTE_MINIMAL指示编写器对象仅引用那些包含特殊字符(例如定界符,quotechar或换行符中的任何字符)的字段。

相关问题:-Postgresql COPY空字符串为NULL不起作用

python csv postgresql python-3.x

5
推荐指数
1
解决办法
2492
查看次数