【发布时间】:2015-10-14 07:00:42
【问题描述】:
我已经编写了以下代码来将数据插入到 MEMSql 中,它的语法与 MySQL 中的语法几乎相似。
def get_connection(db=DATABASE):
""" Returns a new connection to the database. """
return database.connect(host=HOST, port=PORT, user=USER, password=PASSWORD, database=db)
def insert_data(data):
print 'inserting data...'
for item in data:
vars_to_sql = []
keys_to_sql = []
print(item)
for key,value in item.iteritems():
if key == '__osHeaders':
value = str(value)
if isinstance(value, unicode):
vars_to_sql.append(value.encode('ascii', 'ignore'))
keys_to_sql.append(key.encode('ascii', 'ignore'))
else:
vars_to_sql.append(value)
keys_to_sql.append(key)
keys_to_sql = ', '.join(keys_to_sql)
with get_connection() as conn:
c = conn.execute("INSERT INTO tablename (%s) VALUES %r" % (keys_to_sql, tuple(vars_to_sql),))
print c
字段名称不能硬编码,因为它们可能会根据我从另一端获得的数据而改变。无论如何,它是我在这里迭代的字典。由于这个单次插入非常慢,我需要将批量大小作为变量,形成查询语句并相应地插入。所以批量大小为 2 的查询将是 INSERT INTO tablename col1, col2 VALUES ('a', 'b'),('c','d')
请帮我在这里介绍一下。
【问题讨论】:
-
第二个没有指定字段。第一个我需要获取我需要并执行的数据的副本。为什么我不能在我拥有的同一个字典中这样做
-
在第二个中,在
VALUES之前插入你的col1, col2 -
或者这也改变了? (这实际上可能是您问题的重点)
标签: python batch-insert singlestore