我正在使用Postgres,并希望进行一个从CSV文件中获取的大更新查询,假设我得到了一张表(id, banana, apple).
我想运行一个更新香蕉而不是苹果的更新,每个新香蕉及其ID都将在CSV文件中.
我试着查看Postgres网站,但是这些例子正在扼杀我.
我在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) 这是我用于创建临时表的语法:
create temp table tmpTable (id bigint not null, primary key (id)) on commit drop;
Run Code Online (Sandbox Code Playgroud)
我知道这意味着在每个事务结束时,此表将被删除.我的问题是,如果同一会话中的两个或多个线程创建并将值插入临时表,它们每个都会获得自己的实例,还是整个会话中共享的临时实例?如果它是共享的,有没有办法让它在每个线程本地?
谢谢Netta
我正在使用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格式的无引号的空字符串。对于不想将空值与空字符串区分开的情况,甚至可能以文本格式使用空字符串。使用二进制格式时,不允许使用此选项。
回答:
对我来说解决问题的是将报价更改为csv.QUOTE_MINIMAL。
csv.QUOTE_MINIMAL指示编写器对象仅引用那些包含特殊字符(例如定界符,quotechar或换行符中的任何字符)的字段。
postgresql ×4
csv ×2
casting ×1
database ×1
file-io ×1
java ×1
python ×1
python-3.x ×1
ruby ×1
sql ×1