以下是我初学Django,用mssql适配器和与数据库交互遇到的问题和注意事项,基本上搜索都能出来,总结记录了一下。
我用的适配器是django-mssql,其他的如pyodbc也还可以,感觉配置比django-mssql简单,但也没有相差很多,酌情选择
安装pywin32模块时,找不到python路径
错误显示为Python version 2.7 required, which was not found in the registry
1 | # script to register Python 2.0 or later for use with win32all |
- 运行脚本即可。
- reference
django-mssql安装注意事项
- 执行python setup.py install命令
- 将python的安装目录下的django的同目录下的django_mssql-xxb1-py2.7.egg中sqlserver_ado目录拷贝到\Python27\Lib\site-packages\django\db\backends目录下
settings.py中DATABASES的ENGINE配置
- 需注意ENGINE填django.db.backends.sqlserver_ado而不是django-mssql
- reference:
从数据库中自动生成django模型
- 通过python manage.py inspectdb >…/models.py命令自动生成模型。
- reference
不使用django的orm,如何写原生sql并且返回字典
有时候要做一些复杂查询,orm可能不能满足,还是写原生sql方便一些。
两种方法:
- Manager.raw(),个人觉得不好,不多说
- 避免数据模型,自定义sql语句
以下说的是第二种方法
- 概览:
from django.db import connection,transaction:导入模块
django.db.connection:代表默认的数据库连接
django.db.transaction:代表默认数据库事务(transaction)
connection.cursor(): 获得一个游标(cursor)对象
cursor.execute(sql, [params]):执行SQL
cursor.fetchone() 或者 cursor.fetchall():返回结果行- 实例(我常用):
1 | from django.db import connection,transaction |
执行增删改操作,则在cursor.execute()之后调用transaction.commit_unless_managed()来保证你的更改提交到数据库。
印象中django-mssql和pywin32的版本问题也挺头疼,资源挺难找的,但时间太久了,记错勿怪