使用 sqlalchemy、pyodbc 存储数据框:SQL 语法错误
Storing a dataframe with sqlalchemy, pyodbc: SQL syntax error
我想使用命令 pandas.to_sql 将数据帧存储到 Teradata 数据库中,但出现 SQL 语法错误。错误似乎来自内置方法,我不知道如何处理。
我的代码:
import pandas as pd
import datetime as dt
import sqlalchemy, pyodbc
todays_date = dt.datetime.now().date()
index = pd.date_range(todays_date-dt.timedelta(10), periods=10, freq='D')
columns = ['A','B', 'C']
df_ = pd.DataFrame(index=index, columns=columns)
df_ = df_.fillna(0)
engine = sqlalchemy.create_engine("mssql+pyodbc://" + user + ":" + passwd + "@" +dsnname)
df_.to_sql(name= 'TableTest', con = engine, if_exists='replace')
我得到的错误是:
ProgrammingError: (pyodbc.ProgrammingError) ('42000', "[42000] [Teradata][ODBC Teradata Driver][Teradata Database] Syntax error: expected something between '(' and ')'. (-3706) (SQLExecDirectW)") [SQL: 'SELECT schema_name()']
这是一个分为两部分的答案:
- 安装sqlalchemy-teradata.
按如下方式创建引擎和 table:
engine = sqlalchemy.create_engine("teradata://" + user + ":" + passwd + "@" +dsnname)
df.to_sql(name= 'TableTest', con = engine, index=False, schema='database_name', if_exists='replace')
我想使用命令 pandas.to_sql 将数据帧存储到 Teradata 数据库中,但出现 SQL 语法错误。错误似乎来自内置方法,我不知道如何处理。
我的代码:
import pandas as pd
import datetime as dt
import sqlalchemy, pyodbc
todays_date = dt.datetime.now().date()
index = pd.date_range(todays_date-dt.timedelta(10), periods=10, freq='D')
columns = ['A','B', 'C']
df_ = pd.DataFrame(index=index, columns=columns)
df_ = df_.fillna(0)
engine = sqlalchemy.create_engine("mssql+pyodbc://" + user + ":" + passwd + "@" +dsnname)
df_.to_sql(name= 'TableTest', con = engine, if_exists='replace')
我得到的错误是:
ProgrammingError: (pyodbc.ProgrammingError) ('42000', "[42000] [Teradata][ODBC Teradata Driver][Teradata Database] Syntax error: expected something between '(' and ')'. (-3706) (SQLExecDirectW)") [SQL: 'SELECT schema_name()']
这是一个分为两部分的答案:
- 安装sqlalchemy-teradata.
按如下方式创建引擎和 table:
engine = sqlalchemy.create_engine("teradata://" + user + ":" + passwd + "@" +dsnname) df.to_sql(name= 'TableTest', con = engine, index=False, schema='database_name', if_exists='replace')