踩过了才知道 --关于使用pycharm 2016+python3.7+Django的各种坑(持续更新)


问题1.有时安装的mysql驱动不好用
本来安装的mysql驱动叫做myqsl-python或者是 从https://www.lfd.uci.edu/~gohlke/pythonlibs/ 下载的

MySQL_python-1.2.5-cp27-none-amd64.whl(开始的时候连这个文件都装不上,原因是pip在检查安装包版本时是按照文件名检查的,要把那个cp27改成你的python版本。比如你的python是3.7的那么就改为cp37。)但是即使这样安装了还是不能用的话,就要安装另一个版本的驱动。方法就是pip install pymysql.但是在你使用pycharm的django的时候还是有问题就是django源文件里默认调用mysql的模块名字参数是mysqldb,而你机器里的mysql模块名字则是pymysql。这个时候就要对pycharm下的django项目根目录下的settings.py文件进行设置了,这个文件是每次django项目的入口。


在项目根目录的_init_.py里添加如下代码。

import pymysql

pymysql.install_as_MySQLdb()


其中pysql.install_as_MySQLds()是pymysql模块_init_.py文件里的一个函数。(题外话。这也说明模块目录下的_init_.py文件里的函数可以直接用 module.fuc()的方式引用)这个函数的作用就是将所有需要引用mysqldb模块的地方都转为引用pymysql模块。


问题2.在 启动manage.py Task命令时可能会有一个报错,这个报错的内容结尾是

 "Choices should be list"

这个原因可能是你的pycharm版本太低然后与你的python版本结合的不好,可以通过
安装最新版的pycharm解决。

如果一定要用这出问题的版本,解决方法是:先找到pycharm目录下的相对应paser目录比如:C:\Program Files (x86)\JetBrains\PyCharm 2016.3.2\helpers\pycharm\django_manage_commands_provider\_parse。里面有个_utils.py文件,这个文件是不可修改的。你先用IDLE打开这个文件,然后里面的内容复制到一个新建的py文件里,然后把 assert isinstance(opt.choices, list), "Choices should be list"这句修改为:assert isinstance(opt.choices, (list, tuple)), "Choices should be list or tuple"。然后再把这个文件命名为_utils,py再覆盖原文件即可。源文件别忘了备份。

这个解决方法的原文在这里:

update your _utils.py in YOUR_PYCHARM_INSTALLATION_DIR\helpers\pycharm\django_manage_commands_provider\_parser\_utils.py

and changes the code in line 20:

assert isinstance(opt.choices, list), "Choices should be list"

with

assert isinstance(opt.choices, (list, tuple)), "Choices should be list or tuple"
ref:https://stackoverflow.com/questions/30403806/pycharm-cant-open-manage-py-task


====================================================================

接下来是关于mysql的一些问题
首先是几个有用的mysql语句:


在安装好mysql之后

cd到文件夹 : ”安装目录\MySQL\MySQL Server 5.6>bin> ”输入mysqld --install

启动mysql程序


cd到文件夹 : ”安装目录\MySQL\MySQL Server 5.6>bin> ”输入 net start mysql

启动mysql服务

在这之后你的navicate才能连接到mysql服务器。


输入    mysql -u root     即以root身份进入mysql程序。在这里,你需要知道的是,mysql在安装完之后,root用户是没有密码的,所以你这时才可以输入这个命令不用加 -p 参数就能登陆。

进入mysql命令行之后输入:
set password=password('123456');     

修改密码。

此处将root密码设置为123456。注意,语句需要用分号结束。


cd到文件夹 : ”安装目录\MySQL\MySQL Server 5.6>bin> ”

再次输入 mysql -u root -p

回车后会要你输入密码:

Enter password: *********

星号部分就是你输入的root的密码。
 

具体执行过程是这样的:

''''''

C:\Program Files\MySQL\MySQL Server 5.6\bin>mysql -u root
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 5
Server version: 5.6.34 MySQL Community Server (GPL)

Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> set password=password('123456');
Query OK, 0 rows affected (0.00 sec)

mysql> exit;
Bye

''''''

注意,刚刚安装好mysql时候,root账户还没有密码。所以你可以通过输入 mysql -u root 命令直接登陆root账户,但是设定好密码后你下次再想登陆root账户的时候就要输入 mysql -uroot -p; 才行了



进入mysql之后,输入 show databases;

就能看到一些数据表。这些表里就有你通过navicat软件生成的那个。

当你使用pycharm执行 makemigrations命令时,可能会出现

django.db.utils.InternalError: (1049, "Unknown database 'testdjango'")

的报错。这个时候你就要看看show database;之后看到那些表里是不是有你在pycharm的settings里面

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'TestDjango1',
        'USER':"root",
        'PASSWORD':"oooo1oooo",
        'HOST':'127.0.0.1'
    }
}

这段声明的数据库NAME的那个。


如果没有就要使用

CREATE DATABASE TestDjango;命令


新建一个数据表。


如果报错:ERROR 1007 (HY000): Can't create database 'testdjango'; database exists 那么说明这个数据表已经存在了。


由于你在pycharm的settings里输入的NAME是 ‘TestDjango1’所以你现在可以mysql中输入

CREATE DATABASE TestDjango1


这样你就新建了一个名为TestDjango1的数据表。这个数据表你也可以在navcat里看到


上面的解决方法引用自这里:https://stackoverflow.com/questions/4851138/connecting-to-mysql-from-django


若还有其他问题可以查看这里的解释。


转载自:https://www.cnblogs.com/technologylife/p/6010205.html

本文mysql的安装环境为win7 64位,mysql版本为MySQL5.7

 

问题描述:在命令行输入 mysql -u root -p 登录mysql,返回”Can't connect to MySQL server on localhost (10061)”错误

 

问题原因:在一番谷歌后,查到问题原因是mysql没有启动。因为mysq软件是直接考过来的,不是用setup程序安装的。

 
解决方法:

1、将mysql加入到Windows的服务中。切换到mysql安装目录下的bin文件夹,命令行运行"mysqld --install"

    1 C:\Program Files\MySQL\MySQL Server 5.7\bin> mysqld --install
    2 Service successfully installed.

此时若使用“net start mysql”成功启动msyql,则无须执行下面步骤

2、初始化mysql数据库,输入“mysqld --initialize --user=root --console”。下面红色文字为初始化后的root 密码
复制代码

C:\Program Files\MySQL\MySQL Server 5.7\bin>mysqld --initialize --user=root --console
2016-10-29T01:35:44.309833Z 0 [Warning] TIMESTAMP with implicit DEFAULT value is deprecated. Please use --explicit_defaults_for_timestamp server option (see doc
umentation for more details).
2016-10-29T01:35:46.659968Z 0 [Warning] InnoDB: New log files created, LSN=45790

2016-10-29T01:35:47.154996Z 0 [Warning] InnoDB: Creating foreign key constraintsystem tables.
2016-10-29T01:35:47.362008Z 0 [Warning] No existing UUID has been found, so we assume that this is the first time that this server has been started. Generating
a new UUID: 043563f4-9d78-11e6-a8c8-606dc79c383c.
2016-10-29T01:35:47.388009Z 0 [Warning] Gtid table is not ready to be used. Table 'mysql.gtid_executed' cannot be opened.
2016-10-29T01:35:47.401010Z 1 [Note] A temporary password is generated for root@localhost: u).ig.Gd.7hW


3、此时使用“net start mysql”成功启动msyql

4、使用生成的密码登录mysql,通过“set password=password('123456')”修改密码。此处将root密码设置为123456

mysql> set password=password('123456');
Query OK, 0 rows affected, 1 warning (0.00 sec)
现在就都OK了






===================================================================
新的一个坑
从Django2.0开始,urls.py配置方法有很大改变。

1.把url函数换成path

2.不在使用^、$作为路由

3.其他地方以后再进一步研究

 

下面看一个列子:

from django.contrib import admin
from django.urls import path            #此处应用path,老板本使用的是url
from appchat import views

urlpatterns = [
path('admin/', admin.site.urls),
path('login/', views.acc_login,name='login'),
path('logout/', views.acc_logout, name='logout'),
path('',views.index,name='index'),                               #此处设置为首页,以前写法是'^$',新版本不再使用^、$,只需要‘’就可以

]

 

如果使用了^、$会有一个警告,但是这个警告是严重的,页面也不能正常访问,错误如下:

WARNINGS:
?: (2_0.W001) Your URL pattern '^$/' [name='index'] has a route that contains '(?P<', begins with a '^', or ends with a '$'. This was likely an oversight when migrating to django.urls.path().

如果要使用正则表达式,就要用这个办法
from django.urls import path

urlpatterns = [
    path('admin/', admin.site.urls),        #非正则的这么写
    re_path(r'^message_form/$',getform),       #正则表达的这么写

 

]

 

========================

 

新的坑,在django项目中,执行python manage migrate

会报错说

MySQL Strict Mode is not set for database connection 'default


 

根据官方文档:https://docs.djangoproject.com/en/1.10/ref/databases/#mysql-sql-mode

 

这时应该对settings.py的DATABASES做如下修改:

 

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'TestDjango1',
        'USER':"root",
        'PASSWORD':"oooo1oooo",
        'HOST':'127.0.0.1',
        'OPTIONS':{'init_command':"SET sql_mode='STRICT_TRANS_TABLES'"}, # 此处是后加的,不然就会报错说没有使用mysql的严格模式
    }
}

 

你可能感兴趣的:(踩过了才知道 --关于使用pycharm 2016+python3.7+Django的各种坑(持续更新))