django连接数据库sql serve

第一次连接数据库,想问一下这个报错是为什么啊?


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")

img

img

不知道你这个问题是否已经解决, 如果还没有解决的话:
  • 你可以看下这个问题的回答https://ask.csdn.net/questions/773033
  • 这篇博客你也可以参考下:在django中使用sql语句查询
  • 除此之外, 这篇博客: Django实现sql语句中的 附注: 部分也许能够解决你的问题, 你可以仔细阅读以下内容或者直接跳转源博客中阅读:

    在models.py文件中,添加在表类中,称为元类。但是修改之后需要迁移

    class Meta:
            #用来设置数据库的表名
            db_table='bookinfo'
            verbose_name = '书籍'
            #修改后台管理站点中数据库表的名字
            verbose_name_plural=verbose_name
    
  • 您还可以看一下 王进老师的跟着王进老师学Python之Django篇第二季:数据库开发之原生SQL课程中的 外连接介绍和三种写法小节, 巩固相关知识点
  • 以下回答来自chatgpt:

    根据提供的参考资料,结合个人经验,回答如下:

    由于没有提供具体的错误信息,无法判断是何种具体错误,但可以从以下几个方面入手排查:

    1. 检查ODBC Driver的安装和配置情况是否正确,确保ODBC已经可以使用。

    2. 检查settings.py中的数据库连接配置是否正确,包括数据库名称、用户名、密码等。

    3. 检查数据库连接的权限设置是否正确,例如SQL Server和Windows身份认证模式、远程连接等。

    4. 检查是否有迁移记录和数据库写入,在出现该问题时需要执行以下迁移记录和执行写入数据库操作: python manage.py makemigrations python manage.py migrate

    如果仍不能解决问题,可以使用以下方法:

    1. 升级或降级django-pyodbc-azure依赖包,确保其支持当前所需的Django版本。

    2. 使用django-mssql-backend代替django-pyodbc-azure进行数据库连接。

    3. 对用户提交的字符串做安全验证,例如验证字符串是否含有危险字符串,验证数据的类型和长度等。

    4. 在使用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()
    

    注意,不要直接使用字符串拼接的方式插入数据库查询语句中。


如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^