Mysql 如何在Python/Django中正确打开到数据库的连接
我想知道如何正确打开到数据库的新连接。当我想从代码中的许多地方创建对数据库的单个查询时,会出现一个问题。例如,一个请求从login.html发送到数据库,第二个从register页面发送到数据库,第三个从index.html发送到gallery。我想,我应该使用一些项目模式吗?你有什么建议吗 我编写了这个类,负责连接mysql数据库。我认为这是非常错误的(我还没有把重点放在验证上,但我知道这一点):Mysql 如何在Python/Django中正确打开到数据库的连接,mysql,django,design-patterns,Mysql,Django,Design Patterns,我想知道如何正确打开到数据库的新连接。当我想从代码中的许多地方创建对数据库的单个查询时,会出现一个问题。例如,一个请求从login.html发送到数据库,第二个从register页面发送到数据库,第三个从index.html发送到gallery。我想,我应该使用一些项目模式吗?你有什么建议吗 我编写了这个类,负责连接mysql数据库。我认为这是非常错误的(我还没有把重点放在验证上,但我知道这一点): 导入mysql.connector 导入配置分析器 类DataBaseConnectionHan
导入mysql.connector
导入配置分析器
类DataBaseConnectionHandler(对象):
__DATABASE=“”
user=“”
passwd=“”
host=“”
fileName=“”
dataBaseConnection=“”
def u u init u;(self,fileName=None,host='localhost'):
如果文件名不是“无”:
config_file=configparser.configparser()
config_file.read('shop/config/dbConfig.ini')
数据库:str=config_file.get('DEFAULT','database')
user:str=config_file.get('DEFAULT','user')
密码:str=config_file.get('DEFAULT','password')
self.\uuu DATABASE=数据库
self.user=用户
self.passwd=密码
self.host=host
def connectToDatabase(自):
“”“执行连接并返回到数据库的挂钩”“”
dataBaseConnector=mysql.connector.connect(
host=self.host,
user=self.user,
passwd=self.passwd,
数据库=self.\u数据库
)
如果是数据库连接器!="":
self.dataBaseConnection=数据库连接器
返回self.dataBaseConnection
其他:
self.dataBaseConnection=None
返回self.dataBaseConnection
类注册器
from.databases导入DataBaseConnection
类注册器(对象):
__formName=“”
__formLogin=“”
__formSurrname=“”
__formPasswd=“”
__fromEmail=“”
定义初始化(self、用户名、userSurrname、userLogin、userPassword、userEmail):
self.\uu formName=用户名
self.\u formSurrname=userSurrname
self.\uu formLogin=userLogin
self.\uu formPasswd=userPassword
self.\u fromEmail=用户电子邮件
def createUser(自我):
打印(“[!]创建用户”)
#------与数据库的连接----------------
hook=DataBaseConnection.DataBaseConnectionHandler('shop/config/dbConfig.ini')。connectToDatabase()
myCursor=hook.cursor()
#------正在执行MYSQL查询----------------
#[!]nie szyfruje有一个
sqlstation=“插入用户(登录名、密码、电子邮件、姓名、姓氏)”\
值({}',{}',{}',{}',{}',{}',{}'),
self.\u formPasswd,
self.\u来自电子邮件,
self.\u formName,
自我(自我名称)
myCursor.execute(sqlStatment)
hook.commit()
打印(myCursor.rowcount,“插入记录”)
打印(“[*]执行查询”)
#------紧密连接----------------
hook.close()
我知道Django有自己的连接数据库的方法,但它是为我准备的。我有一些有线错误,这就是为什么我决定使用PyMysql。在不久的将来,我将改变这一点,但现在是学习如何正确编写代码的好时机
编辑:
连接Django ORM时出现了什么错误?我更新了帖子:)我解决了它。解决方案在此页上:。我必须使用:sudo apt get install python dev default libmysqlclient dev安装依赖默认libmysqlclient dev,并在该错误消失后安装。警告:此处使用SQL的方式容易受到SQL注入攻击。如果您必须直接使用MySQL,至少要使用参数化查询。此外,您似乎在复制Django的视图和表单功能——如果您不想学习或使用它们,请使用更简单的框架,如Flask。
PycharmProjects/lovLevelMusic/lovLevelMusic/settings.py changed, reloading.
Watching for file changes with StatReloader
Exception in thread django-main-thread:
Traceback (most recent call last):
File "/usr/lib/python3.7/threading.py", line 926, in _bootstrap_inner
self.run()
File "/usr/lib/python3.7/threading.py", line 870, in run
self._target(*self._args, **self._kwargs)
File "/usr/local/lib/python3.7/dist-packages/django/utils/autoreload.py", line 54, in wrapper
fn(*args, **kwargs)
File "/usr/local/lib/python3.7/dist-packages/django/core/management/commands/runserver.py", line 109, in inner_run
autoreload.raise_last_exception()
File "/usr/local/lib/python3.7/dist-packages/django/utils/autoreload.py", line 77, in raise_last_exception
raise _exception[1]
File "/usr/local/lib/python3.7/dist-packages/django/core/management/__init__.py", line 337, in execute
autoreload.check_errors(django.setup)()
File "/usr/local/lib/python3.7/dist-packages/django/utils/autoreload.py", line 54, in wrapper
fn(*args, **kwargs)
File "/usr/local/lib/python3.7/dist-packages/django/__init__.py", line 24, in setup
apps.populate(settings.INSTALLED_APPS)
File "/usr/local/lib/python3.7/dist-packages/django/apps/registry.py", line 114, in populate
app_config.import_models()
File "/usr/local/lib/python3.7/dist-packages/django/apps/config.py", line 211, in import_models
self.models_module = import_module(models_module_name)
File "/usr/lib/python3.7/importlib/__init__.py", line 127, in import_module
return _bootstrap._gcd_import(name[level:], package, level)
File "<frozen importlib._bootstrap>", line 1006, in _gcd_import
File "<frozen importlib._bootstrap>", line 983, in _find_and_load
File "<frozen importlib._bootstrap>", line 967, in _find_and_load_unlocked
File "<frozen importlib._bootstrap>", line 677, in _load_unlocked
File "<frozen importlib._bootstrap_external>", line 728, in exec_module
File "<frozen importlib._bootstrap>", line 219, in _call_with_frames_removed
File "/usr/local/lib/python3.7/dist-packages/django/contrib/auth/models.py", line 2, in <module>
from django.contrib.auth.base_user import AbstractBaseUser, BaseUserManager
File "/usr/local/lib/python3.7/dist-packages/django/contrib/auth/base_user.py", line 47, in <module>
class AbstractBaseUser(models.Model):
File "/usr/local/lib/python3.7/dist-packages/django/db/models/base.py", line 117, in __new__
new_class.add_to_class('_meta', Options(meta, app_label))
File "/usr/local/lib/python3.7/dist-packages/django/db/models/base.py", line 321, in add_to_class
value.contribute_to_class(cls, name)
File "/usr/local/lib/python3.7/dist-packages/django/db/models/options.py", line 204, in contribute_to_class
self.db_table = truncate_name(self.db_table, connection.ops.max_name_length())
File "/usr/local/lib/python3.7/dist-packages/django/db/__init__.py", line 28, in __getattr__
return getattr(connections[DEFAULT_DB_ALIAS], item)
File "/usr/local/lib/python3.7/dist-packages/django/db/utils.py", line 201, in __getitem__
backend = load_backend(db['ENGINE'])
File "/usr/local/lib/python3.7/dist-packages/django/db/utils.py", line 110, in load_backend
return import_module('%s.base' % backend_name)
File "/usr/lib/python3.7/importlib/__init__.py", line 127, in import_module
return _bootstrap._gcd_import(name[level:], package, level)
File "/usr/local/lib/python3.7/dist-packages/django/db/backends/mysql/base.py", line 22, in <module>
from MySQLdb.constants import CLIENT, FIELD_TYPE # isort:skip
ImportError: cannot import name 'CLIENT' from 'MySQLdb.constants' (unknown location)
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'dbDjango',
'USER': 'root',
'PASSWORD': 'password',
'HOST': '127.0.0.1',
'PORT': '3306',
}
}