如何在使用python脚本导入postgres之前对csv文件中的单元格进行分区?

时间:2014-08-22 21:28:57

标签: python postgresql csv

我想通过销售美元/销售单位(如果销售单位为0,则为0)插入产品的价格到postgres sql中。是否可以在插入数据库时​​执行此操作或者是否必须运行更新? (见下文)

arg = {
            'sales_dollars': row[8].strip()
            'sales_units': row[9].strip()
            'average_on_hand_dollars': row[11].strip()
            'average_on_hand': row[12].strip() }

cur.execute(
            """INSERT INTO 
            "Sales_Inventory"("sales_dollars","sales_units", "price", "average_on_hand_dollars","average_on_hand", "cost")
             select
                %(sales_dollars)s,
                %(sales_units)s,
                #price = sales_dolars/sales_unit should go here
                %(average_on_hand_dollars)s,
                %(average_on_hand)s
                #cost = average_on_hand_dollars/average_on_hand should go here
            ;""", arg)

提前谢谢

2 个答案:

答案 0 :(得分:0)

只需添加另一个键值对:

arg['price'] = arg['sales_dollars']/arg['sales_units']

cur.execute( # ...
                %(price)s
             # ...

当然,你的价值观是字符串,而不是数字,所以/不会给你带来太多好处。但这很容易解决:转换为数字,除以,然后可选地转换回字符串:

arg['price'] = float(arg['sales_dollars'])/float(arg['sales_units'])

答案 1 :(得分:0)

最好的方法是:

if not arg["sales_dollars"]:
   arg["sales_dollars"] == 0

...在你的python中。如果由于某种原因这是不可行的,PostgreSQL可以通过COALESCE来解决这个问题:

COALESCE(%{sales_dollars}s, 0)

...可以在你放置字段的地方插入。