我正在尝试用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
// ...
};
答案 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
。