Python中的SQL语句分块
我正在尝试将现有的PostGIS代码用于CartoDB。要接收数据,请将其分块并发布到CartoDB,但安装文件中包含的多行create语句分块不好。因此,我发现自己提交了大量内容 我试图通过POST在URL中提交大约9000字节,之后我得到一个414(太大)错误 有人知道如何将块约束为完整的语句(例如,以;)结尾吗Python中的SQL语句分块,python,postgresql,itertools,cartodb,Python,Postgresql,Itertools,Cartodb,我正在尝试将现有的PostGIS代码用于CartoDB。要接收数据,请将其分块并发布到CartoDB,但安装文件中包含的多行create语句分块不好。因此,我发现自己提交了大量内容 我试图通过POST在URL中提交大约9000字节,之后我得到一个414(太大)错误 有人知道如何将块约束为完整的语句(例如,以;)结尾吗 如果每次下一行是CREATETABLE时都进行post,会发生什么情况?像CREATETABLE这样的DDL命令倾向于发出一个隐式提交,这样您就可以创建您所读取、插入然后提交的内容
如果每次下一行是CREATETABLE时都进行post,会发生什么情况?像CREATETABLE这样的DDL命令倾向于发出一个隐式提交,这样您就可以创建您所读取、插入然后提交的内容。在下一次创建插入块时重复此操作。示例中列出的查询<9k。如果每次发布下一行是create table,会发生什么情况?像CREATETABLE这样的DDL命令倾向于发出一个隐式提交,这样您就可以创建您所读取、插入然后提交的内容。在下一次创建插入块时重复此操作。示例中列出的查询小于9k。
def grouper(iterable, n):
it = iter(iterable)
while True:
chunk = tuple(islice(it, n))
if not chunk:
return
yield chunk
buffer = []
#pattern to match blank or comment lines
pattern = re.compile("^\s*\-\-.*$|\s+$")
for line in fileinput.input():
#drop blank or comment lines.
if pattern.match(line):
pass
else:
buffer.append(line.strip())
for group in grouper(buffer,500):
query = "".join(group)
params = {
'api_key' : config['apikey'],
'q' : query
}
r = requests.post(API_URL, params=params)