【发布时间】:2019-01-06 02:50:58
【问题描述】:
我正在尝试将一个 pandas 数据帧附加到已创建的表中,但我不断收到错误消息。
我正确连接到服务器。服务器内部有很多数据库,那么这个表就在db_STAFF数据库里面。最初,我在做df.to_sql(db_STAFF.dbo.JUNESALES),但我意识到我应该在 connString 中引用它。我试过dbo.JUNESALES 以及JUNESALES。下面错误中的表名称会根据我所说的表(dbo.JUNESALES 与 JUNESALES)而变化,但实际错误保持不变。
请参阅下面的代码和错误,减去我确实包含的导入语句。
df = pd.DataFrame(lists_data)
connString = "DRIVER={Adaptive Server Enterprise};SERVER=XXXX,DATABASE = 'db_STAFF'...."
conn_url = quote_plus(connString)
new_connection = "sybase+pyodbc:///?odbc_connect={}".format(conn_url)
engine = create_engine(new_connection)
df.to_sql('[dbo].[JUNESALES]', con=engine, if_exists = 'append', index = False) #I also tried this without the brackets, I read that with brackets it worked for someone
engine.execute("SELECT * FROM dbo.JUNESALES ").fetchall()
cursor.execute(statement, parameters)
我在df.to_sql 行收到此错误
sqlalchemy.exc.ProgrammingError: (pyodbc.ProgrammingError) ('42000', "[42000] [Sybase][ODBC Driver][Adaptive Server Enterprise] Incorrect syntax near '('.\n (102) (SQLExecDirectW)") [SQL: '\nCREATE TABLE "[dbo].[JUNESALES]" (\n\t"0" BIGINT NULL, \n\t"1" BIGINT NULL, \n\t"2" FLOAT NULL, \n\t"3" TEXT NULL, \n\t"4" BIT NULL, \n\t"5" BIT NULL, \n\t"6" FLOAT NULL, \n\t"7" FLOAT NULL, \n\t"8" FLOAT NULL, \n\t"9" FLOAT NULL, \n\t"10" FLOAT NULL, \n\t"11" BIGINT NULL, \n\tCHECK ("4" IN (0, 1)), \n\tCHECK ("5" IN (0, 1))\n)\n\n'] (Background on this error at: http://sqlalche.me/e/f405)
【问题讨论】:
-
“错误是一个段落,我只是为了更容易阅读而将这些行分开”-请不要那样做。准确的错误消息格式通常非常重要,even down to individual space characters。
-
我可以解决这个问题@user2357112
-
现在一段@user2357112
-
我很确定
to_sql的第一个参数应该只是表名——没有数据库或模式信息,也没有括号。 (ASE 甚至使用方括号来转义标识符吗?我认为不会。)
标签: python pandas sqlalchemy sybase sap-ase