第一次连接数据库,想问一下这个报错是为什么啊?
from django.http import HttpResponse
from django.shortcuts import render
import pymssql
import json
def login(request):
return render(request, 'login.html')
def index(request):
return render(request, 'index.html')
def check(request):
data = request.GET
account = data['account']
password = data['password']
db = pymssql.connect('127.0.0.1','sa','15036838685a','VCD_info')
cursor = db.cursor()
sql = 'select * from user_info where account="{}"'.format(account)
cursor.execute(sql)
result = cursor.fetchall()
cursor.close()
db.close()
if result[0][0] == password:
return HttpResponse(json.dumps({
'status':'ok',
'msg':'index/'
}))
else:
return HttpResponse(json.dumps({
'status':'error',
'msg':'账号密码错误'
}))
#下面是报错:
raceback (most recent call last):
File "D:\python_path\Lib\site-packages\django\core\handlers\exception.py", line 34, in inner
response = get_response(request)
^^^^^^^^^^^^^^^^^^^^^
File "D:\python_path\Lib\site-packages\django\core\handlers\base.py", line 126, in _get_response
response = self.process_exception_by_middleware(e, request)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "D:\python_path\Lib\site-packages\django\core\handlers\base.py", line 124, in _get_response
response = wrapped_callback(request, *callback_args, **callback_kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "D:\vscode\html文件\html学习\login\login\view.py", line 22, in check
cursor.execute(sql)
File "src\pymssql\_pymssql.pyx", line 459, in pymssql._pymssql.Cursor.execute
File "src\pymssql\_mssql.pyx", line 1087, in pymssql._mssql.MSSQLConnection.execute_query
File "src\pymssql\_mssql.pyx", line 1118, in pymssql._mssql.MSSQLConnection.execute_query
File "src\pymssql\_mssql.pyx", line 1238, in pymssql._mssql.MSSQLConnection.format_and_run_query
File "src\pymssql\_mssql.pyx", line 237, in pymssql._mssql.ensure_bytes
AttributeError: 'builtin_function_or_method' object has no attribute 'encode'
cursor1 = db.cursor()
sql = 'select * from user_info where account="{}"'.format(account)
cursor1.execute(sql)
result = cursor1.fetchall()
cursor 换个名字看看
它的报错又变成这样的了,而且网页的报错是这样的
Traceback (most recent call last):
File "src\pymssql\_pymssql.pyx", line 459, in pymssql._pymssql.Cursor.execute
File "src\pymssql\_mssql.pyx", line 1087, in pymssql._mssql.MSSQLConnection.execute_query
File "src\pymssql\_mssql.pyx", line 1118, in pymssql._mssql.MSSQLConnection.execute_query
File "src\pymssql\_mssql.pyx", line 1251, in pymssql._mssql.MSSQLConnection.format_and_run_query
File "src\pymssql\_mssql.pyx", line 1789, in pymssql._mssql.check_cancel_and_raise
File "src\pymssql\_mssql.pyx", line 1835, in pymssql._mssql.raise_MSSQLDatabaseException
pymssql._mssql.MSSQLDatabaseException: (207, b"Invalid column name '${account}'.DB-Lib error message 20018, severity 16:\nGeneral SQL Server error: Check messages from the SQL Server\n")
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "D:\python_path\Lib\site-packages\django\core\handlers\exception.py", line 34, in inner
response = get_response(request)
^^^^^^^^^^^^^^^^^^^^^
File "D:\python_path\Lib\site-packages\django\core\handlers\base.py", line 126, in _get_response
response = self.process_exception_by_middleware(e, request)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "D:\python_path\Lib\site-packages\django\core\handlers\base.py", line 124, in _get_response
response = wrapped_callback(request, *callback_args, **callback_kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "D:\vscode\html文件\html学习\login\login\view.py", line 22, in check
cursor1.execute(sql)
File "src\pymssql\_pymssql.pyx", line 476, in pymssql._pymssql.Cursor.execute
pymssql._pymssql.ProgrammingError: (207, b"Invalid column name '${account}'.DB-Lib error message 20018, severity 16:\nGeneral SQL Server error: Check messages from the SQL Server\n")
在models.py文件中,添加在表类中,称为元类。但是修改之后需要迁移
class Meta:
#用来设置数据库的表名
db_table='bookinfo'
verbose_name = '书籍'
#修改后台管理站点中数据库表的名字
verbose_name_plural=verbose_name
根据提供的参考资料,结合个人经验,回答如下:
由于没有提供具体的错误信息,无法判断是何种具体错误,但可以从以下几个方面入手排查:
检查ODBC Driver的安装和配置情况是否正确,确保ODBC已经可以使用。
检查settings.py中的数据库连接配置是否正确,包括数据库名称、用户名、密码等。
检查数据库连接的权限设置是否正确,例如SQL Server和Windows身份认证模式、远程连接等。
检查是否有迁移记录和数据库写入,在出现该问题时需要执行以下迁移记录和执行写入数据库操作: python manage.py makemigrations python manage.py migrate
如果仍不能解决问题,可以使用以下方法:
升级或降级django-pyodbc-azure依赖包,确保其支持当前所需的Django版本。
使用django-mssql-backend代替django-pyodbc-azure进行数据库连接。
对用户提交的字符串做安全验证,例如验证字符串是否含有危险字符串,验证数据的类型和长度等。
在使用SQL语句进行查询时尽量使用Django的ORM进行查询,若要使用到SQL语句进行查询可以使用参数化处理。
具体做法如下:
from django.db import connections
my_connection = connections['default']
with my_connection.cursor() as cursor:
sql = '''SELECT * FROM my_table WHERE id = %s'''
cursor.execute(sql, [pk])
result = cursor.fetchall()
注意,不要直接使用字符串拼接的方式插入数据库查询语句中。