一、pycharm新建项目
新建后的项目结构:
二、django 链接mysql数据库
配置setting
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql', # 数据库引擎
'NAME': 'ttt_ans', #数据库名称
'USER': 'rrr', # 链接数据库的用户名
'PASSWORD': 'ddarthc', # 链接数据库的密码
'HOST': '10.100.22.34', # mysql服务器的域名和ip地址
'PORT': '3306', # mysql的一个端口号,默认是3306
}
}
如果直接配置完setting后,一般会出现找不到数据库的情况:
运行后django报错,提示django.db.utils.OperationalError: no such table.
然后在需要的项目中,把 __init__.py或者*.py中添加两行:
import pymysql
pymysql.install_as_MySQLdb()
三、配置url
四、实现数据查询:
你可能需要执行不明确对应模型的查询或者直接执行 UPDATE 、 INSERT 或 DELETE 查询。
在这种情况下,你可以直接操作数据库,完全绕开模型层。
django.db.connection 对象表现缺省数据库连接, django.db.transaction 表现缺省数据库事务。要使用数据库连接可以调用 connection.cursor() 来得到一个指针对象。然后,就可以调用 cursor.execute(sql, [params]) 来执行 SQL 和 cursor.fetchone() 或 cursor.fetchall() 来返回结果行。在执行一个改变数据的操作后,你应当调用 transaction.commit_unless_managed() 来确保你的改变被提交。如果只是获取数据就不必提交了。例如:
def my_custom_sql():
from django.db import connection, transaction
cursor = connection.cursor()
# Data modifying operation - commit required
cursor.execute("UPDATE bar SET foo = 1 WHERE baz = %s", [self.baz])
transaction.commit_unless_managed()
# Data retrieval operation - no commit required
cursor.execute("SELECT foo FROM bar WHERE baz = %s", [self.baz])
row = cursor.fetchone()
return row
如果你使用多个数据库,那么可以使用 django.db.connections 来获得指定数据库的连接(和指针)。 django.db.connections 是一个类似字典的对象,允许你通过别名来获得指定数据库的连接:
from django.db import connections
cursor = connections['my_db_alias'].cursor()
# Your code here...
transaction.commit_unless_managed(using='my_db_alias')
5、将操作数据库的代码进行封装:
import logging
from django.db import connection
LOG = logging.getLogger("boss")
def dictfetchall(cursor):
"Return all rows from a cursor as a dict"
desc = cursor.description
if desc == None:
return []
columns = [col[0] for col in desc]
# for row in cursor.fetchall():
# rows.append(row)
return [
dict(zip(columns, row))
for row in cursor.fetchall()
]
def dictfetone(cursor):
desc = cursor.description
if desc == None:
return None
columns = [col[0] for col in desc]
row = cursor.fetchone()
if row == None:
return None
return dict(zip(columns, row))
def fetchall(sql, params=[]):
cursor = connection.cursor()
cursor.execute(sql, params)
ret = dictfetchall(cursor)
return ret
def fetchone(sql, params=[]):
cursor = connection.cursor()
cursor.execute(sql, params)
ret = dictfetone(cursor)
cursor.close()
return ret
def executeDb(sql, params=[]):
cursor = connection.cursor()
ret = cursor.execute(sql, params)
cursor.close()
return ret
在代码中看到 cursor执行完之后,执行close。想到diango的mysql连接是不是没有做连接池?带着这个疑问上网查看,发现果然有这方面的文档。后来看官网时发现:
django最新版本已经包含了连接池,通过修改配置控制,官方文档:https://docs.djangoproject.com/en/1.9/ref/databases/
参考:
https://blog.csdn.net/shanliangliuxing/article/details/7928562
---------------------
作者:glimmer_it
来源:CSDN
原文:https://blog.csdn.net/qq_15783243/article/details/82155035
版权声明:本文为博主原创文章,转载请附上博文链接!