无法使用 Python SqlAlchemy 将数据写入 Vertica 数据库 - 类型 "TEXT" 不存在
Unable to write data to Vertica Database using Python SqlAlchemy - Type "TEXT" does not exist
我正在尝试将 pandas 数据帧上传到 Vertica 数据库
能够使用 sqlalchemy 设置引擎和查询数据库。
但是当我尝试从 pandas 数据帧上传数据时收到错误消息,因为类型 "TEXT" 不存在。我正在使用 windows 10,并创建了一个 ODBC 连接。
import sqlalchemy as sa
engine = sa.create_engine('vertica+pyodbc:///?odbc_connect=%s' %(urllib.parse.quote('DSN=TESTDB'),))
sql_query = "select * from sample_table"
df = pd.read_sql_query(sql_query, con=engine) # this works, get the data as required in the dataframe
*df.apply[Do various data transformations as required]*
# Write back to the database
df.to_sql(name='sample_table_cleaned', con = engine, schema = "Dev" , if_exists = 'append', index = True)
上面的代码 (df.to_sql) 片段出现错误: ProgrammingError: (pyodbc.ProgrammingError) ('42704', '[42704] ERROR 5108: Type "TEXT" 不 exist\n (5108) (SQLExecDirectW)')
任何人都可以帮忙吗,
提前致谢!!
在工作中遇到过类似的事情,并且对属于字符串对象的列使用 VARCHAR 更改了类型
def updateType(df_para):
dtypedict = {} # create and empty dictionary
for i,j in zip(df_para.columns, df_para.dtypes):
if "object" in str(j):
dtypedict.update({i: sa.types.VARCHAR})
return dtypedict
updatedict = updateType(df) # update the datafraame type
很好的解决方案@calestini!
import sqlalchemy as sa
engine = create_engine('vertica+vertica_python://user:{}@host:5433/db_name')
df.to_sql(name='table_name', schema = 'schema_name', con = engine, if_exists='append', dtype = updatedict, index = False)
这就是数据类型字典如何处理 运行 你的函数:
{'custom_index': sqlalchemy.sql.sqltypes.VARCHAR,
'lastmodifiedbysales': sqlalchemy.sql.sqltypes.VARCHAR,
'linked_distributor': sqlalchemy.sql.sqltypes.VARCHAR,
'linked_reseller': sqlalchemy.sql.sqltypes.VARCHAR,
'number_of_licenses': sqlalchemy.sql.sqltypes.VARCHAR}
谢谢!
我正在尝试将 pandas 数据帧上传到 Vertica 数据库 能够使用 sqlalchemy 设置引擎和查询数据库。
但是当我尝试从 pandas 数据帧上传数据时收到错误消息,因为类型 "TEXT" 不存在。我正在使用 windows 10,并创建了一个 ODBC 连接。
import sqlalchemy as sa
engine = sa.create_engine('vertica+pyodbc:///?odbc_connect=%s' %(urllib.parse.quote('DSN=TESTDB'),))
sql_query = "select * from sample_table"
df = pd.read_sql_query(sql_query, con=engine) # this works, get the data as required in the dataframe
*df.apply[Do various data transformations as required]*
# Write back to the database
df.to_sql(name='sample_table_cleaned', con = engine, schema = "Dev" , if_exists = 'append', index = True)
上面的代码 (df.to_sql) 片段出现错误: ProgrammingError: (pyodbc.ProgrammingError) ('42704', '[42704] ERROR 5108: Type "TEXT" 不 exist\n (5108) (SQLExecDirectW)')
任何人都可以帮忙吗,
提前致谢!!
在工作中遇到过类似的事情,并且对属于字符串对象的列使用 VARCHAR 更改了类型
def updateType(df_para):
dtypedict = {} # create and empty dictionary
for i,j in zip(df_para.columns, df_para.dtypes):
if "object" in str(j):
dtypedict.update({i: sa.types.VARCHAR})
return dtypedict
updatedict = updateType(df) # update the datafraame type
很好的解决方案@calestini!
import sqlalchemy as sa
engine = create_engine('vertica+vertica_python://user:{}@host:5433/db_name')
df.to_sql(name='table_name', schema = 'schema_name', con = engine, if_exists='append', dtype = updatedict, index = False)
这就是数据类型字典如何处理 运行 你的函数:
{'custom_index': sqlalchemy.sql.sqltypes.VARCHAR,
'lastmodifiedbysales': sqlalchemy.sql.sqltypes.VARCHAR,
'linked_distributor': sqlalchemy.sql.sqltypes.VARCHAR,
'linked_reseller': sqlalchemy.sql.sqltypes.VARCHAR,
'number_of_licenses': sqlalchemy.sql.sqltypes.VARCHAR}
谢谢!