首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >NotImplementedError: executemany仅为简单的INSERT语句实现

NotImplementedError: executemany仅为简单的INSERT语句实现
EN

Stack Overflow用户
提问于 2017-05-18 17:02:00
回答 1查看 1.2K关注 0票数 6

我尝试使用sqlalchemy通过pandas追加我的vertica (SQL类型)表

代码语言:javascript
复制
import pandas as pd
import sqlalchemy as sa

创建vertica的引擎:

代码语言:javascript
复制
def get_engine(base):
    engine = sa.create_engine("{sys}+{dri}://{user}:" + \
                               "{password}@{host}:{port}/{database}".format(**login[base]))
    return engine
engine = get_engine('vertica')

为了清楚起见,我给出一个简单的查询:

代码语言:javascript
复制
table = '***'

sql =\
'''
select *
from public.{table}
'''.format(table=table)

connection = engine.connect()
data = pd.read_sql(sql, connection)
connection.close()

数据不为空:

代码语言:javascript
复制
print(len(data))
569955

并尝试写入同一个表:

代码语言:javascript
复制
fields = list(data.columns)
connection = engine.connect()
data.to_sql(table, connection, schema='public', index=False, if_exists='append', chunksize=30000,
            dtype={fields[0]:sa.types.Integer,
            fields[1]:sa.types.VARCHAR,
            fields[2]:sa.types.Integer,
            fields[3]:sa.types.Integer,
            fields[4]:sa.types.Integer,
            fields[5]:sa.types.VARCHAR,
            fields[6]:sa.types.VARCHAR,
            fields[7]:sa.types.VARCHAR,
            fields[8]:sa.types.VARCHAR,
            fields[9]:sa.types.VARCHAR,
            fields[10]:sa.types.VARCHAR,
            fields[11]:sa.types.VARCHAR,
            fields[12]:sa.types.DateTime
           })
connection.close()

并得到这个错误:

代码语言:javascript
复制
...
\Anaconda3\lib\site-packages\sqlalchemy\engine\default.py in do_executemany(self, cursor, statement, parameters, context)
    465 
    466     def do_executemany(self, cursor, statement, parameters, context=None):
--> 467         cursor.executemany(statement, parameters)
    468 
    469     def do_execute(self, cursor, statement, parameters, context=None):

\Anaconda3\lib\site-packages\vertica_python\vertica\cursor.py in executemany(self, operation, seq_of_parameters)
    153         else:
    154             raise NotImplementedError(
--> 155                 "executemany is implemented for simple INSERT statements only")
    156 
    157     def fetchone(self):

NotImplementedError: executemany is implemented for simple INSERT statements only
EN

回答 1

Stack Overflow用户

发布于 2020-03-03 02:42:32

当我尝试使用sqlalchemy将我的数据写入vertica时,我得到了相同的错误。对于我来说,问题出在列名上。它似乎不能写包含特殊字符的列名。我可以通过从pandas中的列名中删除所有的'_‘、'%’和空格字符来修复这个错误,然后我使用df.to_sql()在vertica中编写它。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44043216

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档