【问题标题】:using list to input data using psycoyg2 python (with missing data)使用列表使用 psycoyg2 python 输入数据(缺少数据)
【发布时间】:2010-12-06 06:40:01
【问题描述】:

想从 cvs 中获取一些缺失值的数据到 postgresql 中。我很高兴使用字符串插入。我想要一个快速的是使用列表或类似的东西来做到这一点。我还需要检查缺失值并替换,否则会出错。

for w in csvReader:  
    if a ==0:  
       var = w  
       sql_table = 'CREATE TABLE TableName (%s)' % ','.join('%s VARCHAR(50)' % name for name in var)  
        dict_cur.execute(sql_table)  

    else:  
        colnum = 0  
        for col in w:  
            nms= col   
            print w, 'column'  
            #this is not correct 
            sql_insert = ('INSERT INTO TableName (%s) VALUES (%s)' % (','.join('%s' % name for name in var),','.join('%s' % nm for nm in nms)))  
            cursor.execute(sql_insert)  
            colnum += 1  

        print w  
    a = a + 1  

错误 回溯(最近一次通话最后): 文件“/home/matthew/workspace/dfdsggd/try_db_thing.py”,第 41 行,在 cursor.execute(sql_insert) psycopg2.ProgrammingError:“。”处或附近的语法错误 第 1 行:...ORDER_ADM,MONTH_ADM,DAY_ADM,YEAR_ADM) 值 (2,6,7,.,3,5,7) ^

【问题讨论】:

  • 如果你想要一个明确的答案,你的 csv 和表格结构会很好

标签: python psycopg2


【解决方案1】:

查看错误消息,您似乎正在尝试插入“。”只需在 ORDER_ADM 字段中从数据库中的 csv 读取,而无需将其放在引号之间。

另外三个字段 DAY_ADM、MONTH_ADM、YEAR_ADM 建议您可能应该将它们合并为一个日期并将它们放在数据库的同一字段中。但这意味着以某种方式考虑数据库的结构(而不​​是使所有内容都变成 VARCHAR)。在读取数据的循环中创建表,即使在第一次迭代时也是非常不寻常的。

【讨论】:

  • 是的,我同意这个循环,但这就是我发现的。
  • 由于我不确切地知道要开始的数据类型,我正在考虑只获取数据然后在 Postgres 中更改它。我可以使用正则表达式和自动更改读取数据类型。
  • 这确实是一个例子。 Psycopg2 使事情变得非常困难,因为没有准备好的语句。
  • 我知道这只是一个例子。没有吗? postgresql.org/docs/8.1/interactive/sql-prepare.html
  • 我的理解是 Psycopg2 没有准备好的语句。有一些适用于 python 3 和 postgres 的东西,但我不能使用 python 3 来完成我正在做的大多数事情。
猜你喜欢
  • 2019-02-24
  • 2015-01-29
  • 2020-06-01
  • 1970-01-01
  • 2021-07-31
  • 1970-01-01
  • 2017-07-10
  • 1970-01-01
  • 2014-03-14
相关资源
最近更新 更多