问题描述
我正在尝试从 sql Server 数据库查询 python 数据框,但出现错误。我认为错误是 sql 语法太长?
但我不知道哪里错了。
import dash
import dash_bootstrap_components as dbc
import dash_core_components as dcc
import dash_html_components as html
from dash.dependencies import Input,Output
import dash_table as dt
import pandas as pd
from django_plotly_dash import DjangoDash
import pyodbc
import dash_core_components as dcc
server = '' database = '' username = '' password = '' cnxn = pyodbc.connect('DRIVER={sql Server};SERVER='+server +
';DATABASE='+database+';UID='+username+';PWD=' + password) cursor = cnxn.cursor()
#sql Syntax
query = """SELECT inf_billnom.year,inf_billnom.week,inf_billnom.month,Case inf_billnom.compno when '1' then '東方' when '2' then '中遠' else '物流' end,Max( inf_billnom.vslcode ) vslcode,Max( inf_billnom.vslnm ) vslnm,Max( inf_billnom.voyno ) voyno,Max( inf_billnom.vslno ) vslno,Max( inf_billnom.blno ) blno,Case inf_billnom.ix_cd when 'I' then '進口' when 'E' then '出口' else '未區分' end,inf_billnom.tax_regno,Max( inf_billnom.Trade ) Trade,Max( inf_billnom.Tradelane ) Tradelane,Max( Tradelane.service ) service,Max( inf_billnom.bound ) bound,Max( inf_billnom.is_blready ) is_blready,Max( inf_billnom.cargo_nature ) cargo_nature,Max( inf_billnom.commodity + ( case when inf_billnom.commodity1 is null then ' ' else ' ' + inf_billnom.commodity1 end ) ) commodity,Max( inf_billnom.traffic_mode ) traffic_mode,Max( inf_billnom.ob_departure_date ) ob_departure_date,Max( inf_billnom.ib_arrival_date ) ib_arrival_date,Max( inf_billnom.sail_date ) sail_date,Max( inf_billnom.segment ) segment,case inf_billnom.ix_cd when 'I' then inf_billnom.consignee else inf_billnom.shipper end,Max( inf_billnom.ccp ) ccp,Max( inf_billnom.shipper_id ) shipper_id,Max( inf_billnom.shipper ) shipper,Max( inf_billnom.consignee_id ) consignee_id,Max( inf_billnom.consignee ) consignee,Max( inf_billnom.notify_id ) notify_id,Max( inf_billnom.notify ) notify,Max( inf_billnom.also_notify_id ) also_notify_id,Max( inf_billnom.also_notify ) also_notify,Max( inf_billnom.agree_num ) agree_num,Max( inf_billnom.agree_type ) agree_type,Max( inf_billnom.ctrl_reg ) ctrl_reg,Max( inf_billnom.frm_city ) frm_city,Max( inf_billnom.frm_country ) frm_country,Max( inf_billnom.to_city ) to_city,Max( inf_billnom.to_country ) to_country,Max( inf_billnom.svccode_1st ) svccode_1st,Max( inf_billnom.svccode_mother ) svccode_mother,Max( inf_billnom.pol_mother ) pol_mother,Max( inf_billnom.pod_mother ) pod_mother,Max( inf_billnom.dir ) dir,Max( inf_billnom.loadsvvd_1st ) loadsvvd_1st,Max( inf_billnom.discsvvd_last ) discsvvd_last,Max( inf_billnom.por ) por,Max( inf_billnom.fnd ) fnd,Max( inf_billnom.pol ) pol,Max( inf_billnom.pod ) pod,Max( inf_billnom.tport ) tport,Max( inf_billnom.frm_location ) frm_location,Max( inf_billnom.to_location ) to_location,Max( inf_billnom.por_region ) por_region,Max( inf_billnom.fnd_region ) fnd_region,Max( inf_billnom.terminal_1st ) terminal_1st,Max( inf_billnom.termina_last ) termina_last,Max( case when inf_billnom.nomcargos = 'Y' then '自攬貨' when inf_billnom.nomcargos = 'N' then '指定貨' else '' end ) nomcargos,Max( inf_billnom.department ) department,Max( case when employee.cname is null then inf_billnom.sales else employee.cname end ) sales,Max( inf_billnom.inside ) inside,sum( 1 ) blcnt,sum( case when 0= 0 then inf_billnom.size_20 else 0 end ) size_20,sum( case when 0= 0 then inf_billnom.size_40 else 0 end ) size_40,sum( case when 0= 0 then inf_billnom.size_45 else 0 end ) size_45,sum( case when 0= 0 then inf_billnom.size_20 else 0 end + case when 0= 0 then inf_billnom.size_40 else 0 end + case when 0= 0 then inf_billnom.size_45 else 0 end ) cntrcnt,round (sum( case when 0= 0 then inf_billnom.size_20 else 0 end + case when 0= 0 then inf_billnom.size_40 * 2 else 0 end + case when 0= 0 then inf_billnom.size_45 * 2 else 0 end ),3) teu,Max( inf_billnom.pay_method ) pay_method,Max( inf_billnom.shipperkind ) shipperkind,Max( inf_billnom.isdg ) isdg,Max( ' ' ) emptykey,Max( ' ' ) emptykey1,Max( ' ' ) emptykey2,Max( inf_billnom.liner ) liner,inf_billnom.quarter,round (sum( case when inf_billnom.month = '01' then ( case when 0= 0 then inf_billnom.size_20 else 0 end + case when 0= 0 then inf_billnom.size_40 * 2 else 0 end + case when 0= 0 then inf_billnom.size_45 * 2 else 0 end) else 0 end ),3) month01,round (sum( case when inf_billnom.month = '02' then ( case when 0= 0 then inf_billnom.size_20 else 0 end + case when 0= 0 then inf_billnom.size_40 * 2 else 0 end + case when 0= 0 then inf_billnom.size_45 * 2 else 0 end) else 0 end ),3) month02,round (sum( case when inf_billnom.month = '03' then ( case when 0= 0 then inf_billnom.size_20 else 0 end + case when 0= 0 then inf_billnom.size_40 * 2 else 0 end + case when 0= 0 then inf_billnom.size_45 * 2 else 0 end) else 0 end ),3) month03,round (sum( case when inf_billnom.month = '04' then ( case when 0= 0 then inf_billnom.size_20 else 0 end + case when 0= 0 then inf_billnom.size_40 * 2 else 0 end + case when 0= 0 then inf_billnom.size_45 * 2 else 0 end) else 0 end ),3) month04,round (sum( case when inf_billnom.month = '05' then ( case when 0= 0 then inf_billnom.size_20 else 0 end + case when 0= 0 then inf_billnom.size_40 * 2 else 0 end + case when 0= 0 then inf_billnom.size_45 * 2 else 0 end) else 0 end ),3) month05,round (sum( case when inf_billnom.month = '06' then ( case when 0= 0 then inf_billnom.size_20 else 0 end + case when 0= 0 then inf_billnom.size_40 * 2 else 0 end + case when 0= 0 then inf_billnom.size_45 * 2 else 0 end) else 0 end ),3) month06,round (sum( case when inf_billnom.month = '07' then ( case when 0= 0 then inf_billnom.size_20 else 0 end + case when 0= 0 then inf_billnom.size_40 * 2 else 0 end + case when 0= 0 then inf_billnom.size_45 * 2 else 0 end) else 0 end ),3) month07,round (sum( case when inf_billnom.month = '08' then ( case when 0= 0 then inf_billnom.size_20 else 0 end + case when 0= 0 then inf_billnom.size_40 * 2 else 0 end + case when 0= 0 then inf_billnom.size_45 * 2 else 0 end) else 0 end ),3) month08,round (sum( case when inf_billnom.month = '09' then ( case when 0= 0 then inf_billnom.size_20 else 0 end + case when 0= 0 then inf_billnom.size_40 * 2 else 0 end + case when 0= 0 then inf_billnom.size_45 * 2 else 0 end) else 0 end ),3) month09,round (sum( case when inf_billnom.month = '10' then ( case when 0= 0 then inf_billnom.size_20 else 0 end + case when 0= 0 then inf_billnom.size_40 * 2 else 0 end + case when 0= 0 then inf_billnom.size_45 * 2 else 0 end) else 0 end ),3) month10,round (sum( case when inf_billnom.month = '11' then ( case when 0= 0 then inf_billnom.size_20 else 0 end + case when 0= 0 then inf_billnom.size_40 * 2 else 0 end + case when 0= 0 then inf_billnom.size_45 * 2 else 0 end) else 0 end ),3) month11,round (sum( case when inf_billnom.month = '12' then ( case when 0= 0 then inf_billnom.size_20 else 0 end + case when 0= 0 then inf_billnom.size_40 * 2 else 0 end + case when 0= 0 then inf_billnom.size_45 * 2 else 0 end) else 0 end ),3) month12,Max( view_fnd.value_new ) region FROM {oj inf_billnom LEFT OUTER JOIN employee ON inf_billnom.compno = employee.compno AND inf_billnom.sales
= employee.emp_id LEFT OUTER JOIN Tradelane ON inf_billnom.Trade = Tradelane.Trade AND inf_billnom.Tradelane = Tradelane.Tradelane AND inf_billnom.compno = Tradelane.compno LEFT OUTER JOIN view_fnd ON inf_billnom.compno = view_fnd.compno and ( case inf_billnom.ix_cd when 'I' then inf_billnom.fnd else inf_billnom.por end ) = view_fnd.value_old } wHERE 'TRUE' = 'TRUE' AND ( inf_billnom.compno ='1' or inf_billnom.compno = '2' or inf_billnom.compno = 'N' ) AND ( ( inf_billnom.ix_cd ='I' and inf_billnom.year + inf_billnom.month between '202001' and '202001' ) or ( inf_billnom.ix_cd ='E' and inf_billnom.year + inf_billnom.month between '202001' and '202001' ) ) Group by inf_billnom.year,case inf_billnom.ix_cd when 'I' then inf_billnom.consignee else inf_billnom.shipper end Order by inf_billnom.year,case inf_billnom.ix_cd when 'I' then inf_billnom.consignee else inf_billnom.shipper end;"""
df = pd.read_sql_query(query,cnxn)
错误:
线程 django-main-thread 中的异常:Traceback(最近一次调用):文件“C:\Users\kctadmin\Envs\django3_dash\lib\site-packages\pandas\io\sql.py”,第 1725 行,在执行
cur.execute(*args,**kwargs) pyodbc.ProgrammingError: ('42000','[42000] [Microsoft][ODBC sql Server Driver] 语法错误或违反访问规则 (0) (sqlExecDirectW)')>
上述异常是以下异常的直接原因:
回溯(最近一次调用最后一次):文件“c:\users\kctadmin\appdata\local\programs\python\python37\lib\threading.py”,第 926 行,在 _bootstrap_inner
self.run() 文件“c:\users\kctadmin\appdata\local\programs\python\python37\lib\threading.py”,第 870 行,运行中
self._target(*self._args,**self._kwargs) 文件“C:\Users\kctadmin \Envs\django3_dash\lib\site-packages\django\utils\autoreload.py”,第 53 行,在包装器中
fn(*args,**kwargs) File "C:\Users\kctadmin\Envs\django3_dash\lib\site-packages\channels\management\commands\runserver.py",line 75,in inner_run
('42000','[42000] [Microsoft][ODBC sql Server Driver] 语法错误或违反访问规则 (0) (sqlExecDirectW)')
谢谢
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)