解析表格时出现意外的EOF

时间:2019-02-23 18:03:36

标签: python psycopg2

我正在尝试用python做一个脚本,该脚本将从表1中获取数据并输入到另一个表中。有点像某种ETL。 但是,我遇到了这个LOW错误。 我有点无所适从,想尝试使用别人见过的技术,所以我对自己的方法不太了解。

到目前为止,这是我的代码:

int fontArray[][7] = { 

  // pins: {13, 12, 11, 10, 9, 8, 7},  // 8

  {1, 1, 1, 1, 1, 1, 0}, // 0
  {0, 1, 1, 0, 0, 0, 0}, // 1
  // ...
};

1 个答案:

答案 0 :(得分:0)

第一个问题很容易解决。您有一个多行字符串,仅用单引号引起来:

cursorsource.execute('SELECT sp_no, sp_name, sp_territory, sp_product, 
    active FROM testarea.salepersons_original;') 

您应该用三引号将其引起来,这不会影响SQL执行:

cursorsource.execute("""SELECT sp_no, sp_name, sp_territory, sp_product, 
                        active FROM testarea.salepersons_original;""") 

其余代码对我来说很难理解。我怀疑您实际上有一个包含5000列的表,所以我认为您正在尝试对包含5个值的行进行1000次插入。如果我的理解是正确的,我只能为此提供一般方法:

import random
import string

# Create some fake data to visualise
fake_data = [random.choice(list(string.ascii_letters)) for x in range(50)]

# Chunk the data (https://stackoverflow.com/a/1751478/4799172)
# This reshapes it into sublists each of length 5.
# This can fail if your original list is not a multiple of 5, but I think your
# existing code will still throw the same issues.
def chunks(l, n):
    n = max(1, n)
    return (l[i:i+n] for i in range(0, len(l), n))


chunked_data = chunks(fake_data, 5)

sql_insert = """INSERT INTO testarea.salepersons_2 (sp_no, sp_name, 
                sp_territory, sp_product, active) values (?, ?, ?, ?, ?)"""

# Use executemany, not execute in a loop, to repeat for each sublist in 
# chunked_data
cursor.executemany(sql_insert, chunked_data)

请注意,在这种情况下,我使用参数化查询来防止SQL注入(我使用?作为值的占位符)。不同的图书馆有不同的占位符;例如,MySQL包装器期望%s而SQLite期望?-在这种情况下,我使用了?消除了不只是常规字符串格式的歧义,但您可能需要更改回到%s