由于添加了奇怪的字符,运行 Pymssql.Cursor.Execute 中出现错误
Error in running Pymssql.Cursor.Execute due to Strange Characters Added
我需要帮助修复在我使用 pymssql 进行 sql 查询时发生的错误,下面是我正在使用的代码。
config.py:
import pymssql
class devConfig():
server = 'servername'
usr = 'user'
pwd = 'password'
db_name = 'database'
初始化.py:
from flask import Flask
from sqlalchemy import create_engine
from flask_sqlalchemy import SQLAlchemy
from sqlalchemy.orm import sessionmaker, scoped_session
from config import devConfig
import pymssql
app = Flask(__name__)
app.config.from_object('config')
Session = scoped_session(sessionmaker())
_sql_engine = None
_current_session = None
def session():
global _current_session
if _current_session is None:
session = Session.configure(bind=sql_engine())
_current_session = Session()
return _current_session
def sql_engine():
global _sql_engine
if _sql_engine:
return _sql_engine
else:
server = devConfig.server
db_name = devConfig.db_name
usr = devConfig.usr
pwd = devConfig.pwd
_sql_engine = create_engine("mssql+pymssql://filex.com\{}:{}@{}/{}".format(usr, pwd, server, db_name)) #create_engine("mssql+pymssql://{0}:{1}@{2}/{3}".format(username, password, dns, db))
return _sql_engine
from app import views
views.py:
from flask import render_template, flash, redirect
from app import app
from .forms import LoginForm
from . import session
from sqlalchemy.sql import text
#app.config.from_object('config.DevConfig')
#attributes = inspect.getmembers('config.DevConfig')
@app.route('/')
@app.route('/index')
def index():
select_sql = 'Select top 5 * from vendor'
result = session().execute(text(select_sql))
return render_template('index.html',
title='Home',
data=result)
session().close()
当我运行这个时,我得到这个错误:
File "pymssql.pyx", line 464, in pymssql.Cursor.execute (pymssql.c:7491)
sqlalchemy.exc.ProgrammingError: (pymssql.ProgrammingError) (102, b"Incorrect syntax near 'from\xef\xbb\xbfvendor'.DB-Lib error message 20018, severity 15:\nGeneral SQL Server error: Check messages from the SQL Server\n") [SQL: 'Select top 5 * from\ufeffvendor']
我不明白为什么当我的查询中不存在这些字符时我的查询会变成 'from\xef\xbb\xbfvendor'
。是什么原因造成的,我该如何解决?
您对 SQL-Query 使用了错误的语法。 top
关键字在 myssql 中不可用。使用 limit 0,5
代替:
select_sql = 'Select * from vendor LIMIT 0,5'
也从 W3C schools 检查这个。
顺便说一句:请告诉我这不是您在 config.py
中的真实密码
编辑:我误读了导入语句,请忽略这个答案,它是错误的,没有帮助。
下次尝试:
当你检查那里插入的 Unicode 字符时,它似乎是一个 "Zero with no Break Space" 字符,而不是通常的 space。你可以在这里看到这个:fileformat.info
你能检查你的源代码并在这个位置插入一个Space吗?确保语句
select_sql 'Select top 5 * from vendor'
仅包含适当的 Space。这可能是通过复制和粘贴代码发生的。
我需要帮助修复在我使用 pymssql 进行 sql 查询时发生的错误,下面是我正在使用的代码。
config.py:
import pymssql
class devConfig():
server = 'servername'
usr = 'user'
pwd = 'password'
db_name = 'database'
初始化.py:
from flask import Flask
from sqlalchemy import create_engine
from flask_sqlalchemy import SQLAlchemy
from sqlalchemy.orm import sessionmaker, scoped_session
from config import devConfig
import pymssql
app = Flask(__name__)
app.config.from_object('config')
Session = scoped_session(sessionmaker())
_sql_engine = None
_current_session = None
def session():
global _current_session
if _current_session is None:
session = Session.configure(bind=sql_engine())
_current_session = Session()
return _current_session
def sql_engine():
global _sql_engine
if _sql_engine:
return _sql_engine
else:
server = devConfig.server
db_name = devConfig.db_name
usr = devConfig.usr
pwd = devConfig.pwd
_sql_engine = create_engine("mssql+pymssql://filex.com\{}:{}@{}/{}".format(usr, pwd, server, db_name)) #create_engine("mssql+pymssql://{0}:{1}@{2}/{3}".format(username, password, dns, db))
return _sql_engine
from app import views
views.py:
from flask import render_template, flash, redirect
from app import app
from .forms import LoginForm
from . import session
from sqlalchemy.sql import text
#app.config.from_object('config.DevConfig')
#attributes = inspect.getmembers('config.DevConfig')
@app.route('/')
@app.route('/index')
def index():
select_sql = 'Select top 5 * from vendor'
result = session().execute(text(select_sql))
return render_template('index.html',
title='Home',
data=result)
session().close()
当我运行这个时,我得到这个错误:
File "pymssql.pyx", line 464, in pymssql.Cursor.execute (pymssql.c:7491)
sqlalchemy.exc.ProgrammingError: (pymssql.ProgrammingError) (102, b"Incorrect syntax near 'from\xef\xbb\xbfvendor'.DB-Lib error message 20018, severity 15:\nGeneral SQL Server error: Check messages from the SQL Server\n") [SQL: 'Select top 5 * from\ufeffvendor']
我不明白为什么当我的查询中不存在这些字符时我的查询会变成 'from\xef\xbb\xbfvendor'
。是什么原因造成的,我该如何解决?
您对 SQL-Query 使用了错误的语法。 top
关键字在 myssql 中不可用。使用 limit 0,5
代替:
select_sql = 'Select * from vendor LIMIT 0,5'
也从 W3C schools 检查这个。
顺便说一句:请告诉我这不是您在 config.py
编辑:我误读了导入语句,请忽略这个答案,它是错误的,没有帮助。
下次尝试:
当你检查那里插入的 Unicode 字符时,它似乎是一个 "Zero with no Break Space" 字符,而不是通常的 space。你可以在这里看到这个:fileformat.info 你能检查你的源代码并在这个位置插入一个Space吗?确保语句
select_sql 'Select top 5 * from vendor'
仅包含适当的 Space。这可能是通过复制和粘贴代码发生的。