由于添加了奇怪的字符,运行 Pymssql.Cursor.Execute 时出错

Posted

技术标签:

【中文标题】由于添加了奇怪的字符,运行 Pymssql.Cursor.Execute 时出错【英文标题】:Error in running Pymssql.Cursor.Execute due to Strange Characters Added 【发布时间】:2017-01-05 10:58:12 【问题描述】:

我需要帮助解决我使用 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'。这是什么原因造成的,我该如何解决?

【问题讨论】:

【参考方案1】:

您的 SQL 查询使用了错误的语法。 top 关键字在 mysql 中不可用。请改用limit 0,5

select_sql = 'Select * from vendor LIMIT 0,5'

也可以从W3C schools 那里查看。

顺便说一句:请告诉我这不是你在 config.py 中的真实密码

编辑:我误读了导入语句,请忽略这个答案,这是错误的,没有帮助。

下一次尝试:

当您检查插入那里的 Unicode 字符时,它似乎是一个“没有分隔空格的零”字符,而不是通常的空格。你可以在这里看到这个:fileformat.info 你能检查你的源代码并在这个位置插入一个空格吗?确保声明

select_sql 'Select top 5 * from vendor'

仅包含适当的空格。这可能是通过复制和粘贴代码发生的。

【讨论】:

你为什么认为他使用的是 MySQL 而不是 MS SQL Server(他正在导入pymssql..) 哦,你是对的,我误读为pymysql。感谢您的提示! 非常感谢@MarcelP。现在可以了。我重新编写了 sql 脚本。我打算在这里放置一个存储过程调用,所以它的工作方式可能与简单的选择查询相同。

以上是关于由于添加了奇怪的字符,运行 Pymssql.Cursor.Execute 时出错的主要内容,如果未能解决你的问题,请参考以下文章

编译时添加了奇怪的字符,导致错误

AJAX Post 请求 URL 添加了奇怪的字符

Gatsby - GraphQL - StaticQuery 标签 - 由于查询字符串的奇怪行为,站点无法编译

保存Python字典时,json为每个条目添加一个字符[重复]

<<运算符将字符串添加到列表代理奇怪 - Ruby

自定义字符串长度函数逻辑错误