【发布时间】:2019-04-18 19:44:40
【问题描述】:
我正在使用 sqlalchemy 来读取查询。我的代码是下一个:
def conection(file_name, server, database, uid, pwd):
cnxn = create_engine("mssql+pyodbc:///?odbc_connect={}".format(urllib.parse.quote_plus("DRIVER=SQL SERVER;\
SERVER={0};PORT=1433;DATABASE={1};UID={2};PWD={3};TDS_Version=8.0;".format(server, database, uid, pwd))))
pd.read_sql(query, cnxn, chunksize=100)
parser = argparse.ArgumentParser(description='Connect to the ODBC and extract the tables')
parser.add_argument('-table', type=str)
args = parser.parse_args()
sql_path = os.path.join('..', 'SQL')
filename_base = args.table
sql_filename = os.path.join(sql_path, filename_base)
with open(os.path.join('..', '..', '..', 'configuration', 'connnection.json')) as f:
data = json.load(f)
query = obtain_query(sql_filename)
cnxn = conection(filename_base,
data[filename_base]['server'],
data[filename_base]['database'],
data[filename_base]['uid'],
data[filename_base]['pwd'])
但是我收到以下错误:
sqlalchemy.exc.ProgrammingError: (pyodbc.ProgrammingError) ('42000', "[42000] [Microsoft][ODBC SQL Server Driver][SQL Server]Incorrect syntax near 'L'. (102) (SQLExecDirectW); [42000] [Microsoft][ODBC SQL Server Driver][SQL Server]'.C.u.s.t.o.m.e.r.C.o.d.e.' is an invalid name because it contains a NULL character or an invalid unicode character. (1055)")
这是我的表的示例:
如您所见,我没有空值或无效字符,因为它只是作为文本的数字。我已经检查过了,没有空值或 unicode 字符。
我使用的查询只是一个基本的选择:
SELECT
[Customer]
,[Account]
,[Country]
,[Metric1]
,[Metric2]
,[Metric3]
,[Metric4]
FROM
[Table1]
【问题讨论】:
-
你能告诉我们你使用的查询吗?
-
@Owen 我刚刚将它添加到描述中。
-
好的,你能展示你用来执行那个查询的代码吗?我问是因为错误出在查询本身中。看起来列名格式错误(或者可能是表名)。
-
@Owen 当然!我刚刚用它更新了描述
-
错误显示名为 CustomerCode 的内容(可能是一列)正在作为 C.u.s.t.o.m.e.r.C.o.d.e 发送 打印您的查询并查看它。
标签: python sql sql-server sqlalchemy