mt5 mysql数据库_Django -- 使用MySql数据库

Django默认使用的sqlite3,这在实际的生产环境中是不推荐的;

1. 创建数据库

Linux VM_0_15_centos 3.10.0-693.el7.x86_64 #1 SMP Tue Aug 22 21:09:27 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux

1.1. 使用utf8mb4编码

mysql的utf-8编码最多只支持3个字节,而移动端的一些表情都是以4个字节存储的;utf8mb4是一个替代的方案,建议创建数据库和表都以utf8mb4替代utf-8

1.1.1. 确定mysql的配置文件

# 系统中my.cnf文件的位置

[luizyao@VM_0_15_centos ~]$ locate my.cnf

/etc/my.cnf

/etc/my.cnf.d

/etc/my.cnf.d/client.cnf

/etc/my.cnf.d/mysql-clients.cnf

/etc/my.cnf.d/server.cnf

# mysql启动时,读取配置文件的目录顺序

[luizyao@VM_0_15_centos ~]$ mysql --help | head -n 7

mysql Ver 15.1 Distrib 5.5.56-MariaDB, for Linux (x86_64) using readline 5.1

Copyright (c) 2000, 2017, Oracle, MariaDB Corporation Ab and others.

Usage: mysql [OPTIONS] [database]

Default options are read from the following files in the given order:

/etc/mysql/my.cnf /etc/my.cnf ~/.my.cnf

1.1.2. 修改配置文件

/etc/my.cnf

[client]

default-character-set = utf8mb4

[mysql]

default-character-set = utf8mb4

[mysqld]

# Settings user and group are ignored when systemd is used.

# If you need to run mysqld under a different user or group,

# customize your systemd unit file for mariadb according to the

# instructions in http://fedoraproject.org/wiki/Systemd

character-set-client-handshake = FALSE

character-set-server = utf8mb4

collation-server = utf8mb4_unicode_ci

init_connect='SET NAMES utf8mb4'

1.1.3. 重启数据库服务,检查相关字段

# 保证character_set_client、character_set_connection、character_set_database、character_set_results和character_set_server的值一定是utf8mb4

MariaDB [(none)]> SHOW VARIABLES WHERE Variable_name LIKE 'character_set_%' OR Variable_name LIKE 'collation%';

+--------------------------+----------------------------+

| Variable_name | Value |

+--------------------------+----------------------------+

| character_set_client | utf8mb4 |

| character_set_connection | utf8mb4 |

| character_set_database | utf8mb4 |

| character_set_filesystem | binary |

| character_set_results | utf8mb4 |

| character_set_server | utf8mb4 |

| character_set_system | utf8 |

| character_sets_dir | /usr/share/mysql/charsets/ |

| collation_connection | utf8mb4_unicode_ci |

| collation_database | utf8mb4_unicode_ci |

| collation_server | utf8mb4_unicode_ci |

+--------------------------+----------------------------+

11 rows in set (0.02 sec)

1.1.4. 新建数据库

MariaDB [(none)]> create database blogproject;

Query OK, 1 row affected (0.01 sec)

--查看blogproject创建时候使用的编码,回显中注释的部分可以看出,使用的是utf8mb4编码

MariaDB [mysql]> show create database blogproject;

+-------------+----------------------------------------------------------------------------------------------------+

| Database | Create Database |

+-------------+----------------------------------------------------------------------------------------------------+

| blogproject | CREATE DATABASE `blogproject` /*!40100 DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci */ |

+-------------+----------------------------------------------------------------------------------------------------+

1 row in set (0.00 sec)

1.2. 使用已经存在的数据库

1.2.1. 修改已有数据库的编码

MariaDB [(none)]> alter database blogproject character set utf8mb4;

1.3. 为Django项目新建一个数据库用户

-- 赋予这个新用户增删改查等权限,不授予drop的权限;并且,只允许本地客户端登陆;

MariaDB [mysql]> grant alter,create,delete,index,insert,select,update,trigger on blogproject.* to @localhost identified by '';

Query OK, 0 rows affected (0.04 sec)

MariaDB [mysql]> flush privileges;

Query OK, 0 rows affected (0.03 sec)

-- 检查权限,秘密默认是加密存储

MariaDB [blogproject]> show grants for @localhost;

+----------------------------------------------------------------------------------------------------------------+

| Grants for @localhost |

+----------------------------------------------------------------------------------------------------------------+

| GRANT USAGE ON *.* TO ''@'localhost' IDENTIFIED BY PASSWORD '*5102144CA406FC026831D796EA07645447677551' |

| GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, INDEX, ALTER, TRIGGER ON `blogproject`.* TO ''@'localhost' |

+----------------------------------------------------------------------------------------------------------------+

2 rows in set (0.00 sec)

2. 修改Django的配置

2.1. 修改settings.py中数据库相关

DATABASES = {

# 'default': {

# 'ENGINE': 'django.db.backends.sqlite3',

# 'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),

# }

'default': {

'ENGINE': 'django.db.backends.mysql',

'NAME': 'blogproject',

'USER': '',

'PASSWORD': '',

'HOST': '',

'PORT': '3306', # 默认的服务端口号

'OPTIONS': {

# 存储引擎启用严格模式,非法数据值被拒绝

'init_command': "SET sql_mode='STRICT_TRANS_TABLES'",

'charset': 'utf8mb4',

},

}

}

Darwin luizyaodeMacBook-Air.local 18.6.0 Darwin Kernel Version 18.6.0: Thu Apr 25 23:16:27 PDT 2019; root:xnu-4903.261.4~2/RELEASE_X86_64 x86_64

2.2.1. 安装mysql-connector-c

luizyaodeMacBook-Air:~ luizyao$ brew install mysql-connector-c

==> Downloading https://mirrors.ustc.edu.cn/homebrew-bottles/bottles/mysql-conne

######################################################################## 100.0%

==> Pouring mysql-connector-c-6.1.11.mojave.bottle.tar.gz

🍺 /usr/local/Cellar/mysql-connector-c/6.1.11: 79 files, 15.3MB

2.2.2. 修复mysql-connector-c在mac os的python3的bug

/usr/local/Cellar/mysql-connector-c/6.1.11/bin/mysql_config

# Create options

libs="-L$pkglibdir"

libs="$libs -l "

修改为

# Create options

libs="-L$pkglibdir"

libs="$libs -lmysqlclient -lssl -lcrypto"

2.2.3. 使用pip安装mysqlclient

[luizyaodeMacBook-Air:django-blog luizyao$ pip3 install mysqlclient

2.2.4. 使用pipenv安装mysqlclient

这个时候会报错,因为:because Apple has deprecated use of OpenSSL in favor of its own TLS and crypto libraries.

luizyaodeMacBook-Air:django-blog luizyao$ brew info openssl

openssl: stable 1.0.2s (bottled) [keg-only]

SSL/TLS cryptography library

https://openssl.org/

/usr/local/Cellar/openssl/1.0.2s (1,795 files, 12.0MB)

Poured from bottle on 2019-06-22 at 13:16:17

From: https://mirrors.ustc.edu.cn/homebrew-core.git/Formula/openssl.rb

==> Caveats

A CA file has been bootstrapped using certificates from the SystemRoots

keychain. To add additional certificates (e.g. the certificates added in

the System keychain), place .pem files in

/usr/local/etc/openssl/certs

and run

/usr/local/opt/openssl/bin/c_rehash

openssl is keg-only, which means it was not symlinked into /usr/local,

because Apple has deprecated use of OpenSSL in favor of its own TLS and crypto libraries.

If you need to have openssl first in your PATH run:

echo 'export PATH="/usr/local/opt/openssl/bin:$PATH"' >> ~/.bash_profile

For compilers to find openssl you may need to set:

export LDFLAGS="-L/usr/local/opt/openssl/lib"

export CPPFLAGS="-I/usr/local/opt/openssl/include"

==> Analytics

install: 490,905 (30 days), 1,748,362 (90 days), 6,591,368 (365 days)

install_on_request: 59,162 (30 days), 234,123 (90 days), 884,807 (365 days)

build_error: 0 (30 days)

根据提示做如下操作

luizyaodeMacBook-Air:django-blog luizyao$ echo 'export PATH="/usr/local/opt/openssl/bin:$PATH"' >> ~/.bash_profile

luizyaodeMacBook-Air:django-blog luizyao$ source ~/.bash_profile

luizyaodeMacBook-Air:django-blog luizyao$ export LDFLAGS="-L/usr/local/opt/openssl/lib"

luizyaodeMacBook-Air:django-blog luizyao$ export CPPFLAGS="-I/usr/local/opt/openssl/include"

再安装mysqlclient,就能成功了

luizyaodeMacBook-Air:django-blog luizyao$ pipenv install mysqlclient

Installing mysqlclient…

Adding mysqlclient to Pipfile's [packages]…

✔ Installation Succeeded

Pipfile.lock (cee3a5) out of date, updating to (79d06d)…

Locking [dev-packages] dependencies…

✔ Success!

Locking [packages] dependencies…

✔ Success!

Updated Pipfile.lock (cee3a5)!

Installing dependencies from Pipfile.lock (cee3a5)…

🐍 ▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉ 4/4 — 00:00:01

To activate this project's virtualenv, run pipenv shell.

Alternatively, run a command inside the virtualenv with pipenv run.

2.3. 执行migrate操作

[luizyaodeMacBook-Air:django-blog luizyao$ pipenv run python manage.py migrate

Operations to perform:

Apply all migrations: admin, auth, blog, contenttypes, sessions

Running migrations:

Applying contenttypes.0001_initial... OK

Applying auth.0001_initial... OK

Applying admin.0001_initial... OK

Applying admin.0002_logentry_remove_auto_add... OK

Applying admin.0003_logentry_add_action_flag_choices... OK

Applying contenttypes.0002_remove_content_type_name... OK

Applying auth.0002_alter_permission_name_max_length... OK

Applying auth.0003_alter_user_email_max_length... OK

Applying auth.0004_alter_user_username_opts... OK

Applying auth.0005_alter_user_last_login_null... OK

Applying auth.0006_require_contenttypes_0002... OK

Applying auth.0007_alter_validators_add_error_messages... OK

Applying auth.0008_alter_user_username_max_length... OK

Applying auth.0009_alter_user_last_name_max_length... OK

Applying auth.0010_alter_group_name_max_length... OK

Applying auth.0011_update_proxy_permissions... OK

Applying blog.0001_initial... OK

Applying sessions.0001_initial... OK

只有Applying blog.0001_initial... OK是和我们自己模型相关的,其他的是Django系统自带的一些模型, 我们可以进一步的查看数据库到底做了什么操作;

luizyaodeMacBook-Air:django-blog luizyao$ pipenv run python manage.py sqlmigrate blog 0001

BEGIN;

--

-- Create model Category

--

CREATE TABLE `blog_category` (`id` integer AUTO_INCREMENT NOT NULL PRIMARY KEY, `name` varchar(100) NOT NULL);

--

-- Create model Tag

--

CREATE TABLE `blog_tag` (`id` integer AUTO_INCREMENT NOT NULL PRIMARY KEY, `name` varchar(100) NOT NULL);

--

-- Create model Post

--

CREATE TABLE `blog_post` (`id` integer AUTO_INCREMENT NOT NULL PRIMARY KEY, `title` varchar(70) NOT NULL, `excerpt` varchar(200) NOT NULL, `body` longtext NOT NULL, `created_at` datetime(6) NOT NULL, `modified_at` datetime(6) NOT NULL, `author_id` integer NOT NULL, `category_id` integer NOT NULL);

CREATE TABLE `blog_post_tag` (`id` integer AUTO_INCREMENT NOT NULL PRIMARY KEY, `post_id` integer NOT NULL, `tag_id` integer NOT NULL);

ALTER TABLE `blog_post` ADD CONSTRAINT `blog_post_author_id_dd7a8485_fk_auth_user_id` FOREIGN KEY (`author_id`) REFERENCES `auth_user` (`id`);

ALTER TABLE `blog_post` ADD CONSTRAINT `blog_post_category_id_c326dbf8_fk_blog_category_id` FOREIGN KEY (`category_id`) REFERENCES `blog_category` (`id`);

ALTER TABLE `blog_post_tag` ADD CONSTRAINT `blog_post_tag_post_id_a5c00319_fk_blog_post_id` FOREIGN KEY (`post_id`) REFERENCES `blog_post` (`id`);

ALTER TABLE `blog_post_tag` ADD CONSTRAINT `blog_post_tag_tag_id_2bbd31e4_fk_blog_tag_id` FOREIGN KEY (`tag_id`) REFERENCES `blog_tag` (`id`);

ALTER TABLE `blog_post_tag` ADD CONSTRAINT `blog_post_tag_post_id_tag_id_ba2a5f83_uniq` UNIQUE (`post_id`, `tag_id`);

COMMIT;

在数据库中可以看到Django创建的具体表;

MariaDB [blogproject]> show tables;

+----------------------------+

| Tables_in_blogproject |

+----------------------------+

| auth_group |

| auth_group_permissions |

| auth_permission |

| auth_user |

| auth_user_groups |

| auth_user_user_permissions |

| blog_category |

| blog_post |

| blog_post_tag |

| blog_tag |

| django_admin_log |

| django_content_type |

| django_migrations |

| django_session |

+----------------------------+

14 rows in set (0.00 sec)

2.4. 创建一个管理员用户

luizyaodeMacBook-Air:django-blog luizyao$ pipenv run python manage.py createsuperuser

用户名 (leave blank to use 'luizyao'): luizyao

电子邮件地址: luizyao@163.com

Password:

Password (again):

Superuser created successfully.

在数据库中,我们就可以看到这个管理员用户了

MariaDB [blogproject]> select * from auth_user;

+----+--------------------------------------------------------------------------------+------------+--------------+----------+------------+-----------+-----------------+----------+-----------+----------------------------+

| id | password | last_login | is_superuser | username | first_name | last_name | email | is_staff | is_active | date_joined |

+----+--------------------------------------------------------------------------------+------------+--------------+----------+------------+-----------+-----------------+----------+-----------+----------------------------+

| 1 | pbkdf2_sha256$150000$ViP2waofsEQU$3oNPdGxlGPmt5Nbl/lcHJli8V9j7425ZxRfqKF18E0Q= | NULL | 1 | luizyao | | | luizyao@163.com | 1 | 1 | 2019-08-25 03:49:19.667011 |

+----+--------------------------------------------------------------------------------+------------+--------------+----------+------------+-----------+-----------------+----------+-----------+----------------------------+

1 row in set (0.00 sec)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/349016.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

gradle 安装_如何安装Gradle

gradle 安装Gradle是一个依赖管理/构建工具,结合了Maven和Ant的优点,使其成为功能强大且可自定义的工具。 它还使用了光滑的Groovy DSL而不是Maven和Ant的XML方法,并且当我开始一个新项目时,它是我个人的选择工具。 安装方法如下。…

wps怎么旋转页面_用WPS文字编辑一份试卷,详细教程来了,老师们赶快收藏吧

​ 试卷是每一个教师接触最多的资料了,很多教师在检测前找一些现成的试卷复印给学生练习,但是,有很多题不适合学生,因此,我们需要自己编辑一份试卷了,编辑试卷也并不是很难的,今天,就…

maven 部署nexus_Maven部署到Nexus

maven 部署nexus1.概述 在上一篇文章中 ,我讨论了Maven项目如何在本地安装尚未部署在Maven Central(或任何其他大型且公共托管的存储库)上的第三方jar。 该解决方案仅适用于小型项目,在这些项目中安装,运行和维护完整的…

mongodb mysql json数据_使用MongoDB与MySQL有很多JSON字段?

所以,直接回答问题…Shall we chose mongodb if half of data is schemaless, and is being stored as JSON if using MySQL?无数存储空间肯定是MongoDB的一个引人注目的理由,但正如您所指出的,将JSON存储在RDBMS中也是相当容易的。 MongoDB…

Java命令行界面(第15部分):Jargo

Jargo在其GitHub主页上定义为“一种减轻程序参数/选项处理的工具”。 当已经存在许多其他命令行处理库时,该页面为另一个命令行处理库提供了基本原理 ,该列表的顶部是“因为类型安全性,不变性和可读性很重要”。 Jargo的选项“定义”阶段使用…

mysql 过滤相同数据库_MySQL数据库查询中的重复记录过滤

今天帮别人修改程序,需要分组去最大值。也就是所谓,某一字段有重复字,过滤掉有重复的数据。弄了半天,最后总结一下。首先搞点模拟数据出来create table t2 (id int primary key,gid char,col1 int,col2 int) enginemyisam;insert …

python关于文件的编程题_《Python编程》源代码文件

压缩包 : bbc59749e0028c3f1ab3a1c9a762a6d.rar 列表《Python编程》源代码文件/.gitignore《Python编程》源代码文件/appendix_a/README.md《Python编程》源代码文件/appendix_b/hello_world.py《Python编程》源代码文件/appendix_b/Python3.sublime-build《Python编程》源代码…

java中序列化与反序列化_Java中的序列化

java中序列化与反序列化Java提供了一种称为序列化的机制,以按字节的有序或字节序列的形式持久化Java对象,其中包括对象的数据以及有关对象的类型和存储在对象中的数据类型的信息。 因此,如果我们已序列化了任何对象,则可以使用对象…

Java命令行界面(第3部分):jbock

在本系列中有关使用Java进行命令行分析的前两篇文章中,我介绍了Apache Commons CLI和args4j库。 在本系列的第三篇文章中,我将介绍jbock ,它是自我描述的“非常简单的CLI解析器”。 我在Java中进行命令行解析的文章使用了一些示例&#xff0…

java 关闭串口_java – 打开和关闭串行端口

我正在尝试连接到Serial Port …但是一旦我第一次打开串行端口.我不能再打开它,我试着申请.这是我的代码:public static void main(String[] args) {portList CommPortIdentifier.getPortIdentifiers();while (portList.hasMoreElements()) {portId (CommPortIden…

java collection详解_java 7 collection 详解(一)

一、综述java集合框架定义了几个接口,这些接口决定了collection类的基本特性。不同的是,具体类仅仅是提供了标准接口的不同实现,如图,java集合框架接口图从图可知,java集合类的主要是由两个接口派生而出——Collection…

java导出pdf 含图片_java 生成PDF含图片和中文件实现代码

1,所需包 iText.jar iTextAsian.ar(支持中包)2,列子package com.pdf;import java.awt.Color;import java.io.File;import java.io.FileOutputStream;import java.io.IOException;import java.net.MalformedURLException;import javax.naming.spi.DirectoryManager;import com.l…

jsf tree组件_JSF:在传统组件和时尚性能杀手之间进行选择

jsf tree组件这篇博客文章起源于一个大型Web应用程序中的性能问题。 每个人都优化Java代码,但似乎没有人尝试优化JavaScript代码。 奇怪,因为在客户端有很多改进的空间。 我会说,甚至比服务器端还要多。 我们将分析可编辑的JSF标准组件&#…

java耗时操作阻塞_spring boot高并发下耗时操作的实现方法

高并发下的耗时操作高并发下,就是请求在一个时间点比较多时,很多写的请求打过来时,你的服务器承受很大的压力,当你的一个请求处理时间长时,这些请求将会把你的服务器线程耗尽,即你的主线程池里的线程将不会…

如何在Java中转义JSON字符串-Eclipse IDE技巧

在Java应用程序中工作或进行JSON解析时,通常很常见的做法是从某些资源(例如RESTful Web服务)中复制粘贴JSON字符串,然后使用Jackson库解析JSON。 这是测试和学习Java中解析JSON字符串的最快方法,但是这种方法的主要问题…

java hashmap实例_java HashMap详解及实例代码

java hashmap/** map集合的特点* 将键映射值的对象,一个映射不能包含重复的值;每个键最多只能映射到一个值** map集合和collection集合的区别?* map集合存储元素是成对出现的,map集合的键是唯一的,就是可重复的。可以把…

spring javafx_带有Spring的JavaFX 2

spring javafx我将从一个大胆的声明开始:我一直很喜欢Java Swing或applet。 在那里,我说了。 如果我进行一些自我分析,那么这种钦佩可能是在我接触Java时开始的。 Swing(实际上)是我使用Java所做的第一件事&#xff0c…

jframe和mysql登陆_刚写的一个从数据库读取账户和密码进行登陆的小程序~高手请无~...

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.sql.Connection;import java.sql.DriverManager;import java.sql.*; import javax.swing.*;public class LoginSystem extends JFrame{publi…

使用WebCrypto API的电子签名

有时我们需要让用户进行电子签名。 通常,人们会理解为将您的手写签名以某种方式放在屏幕上。 根据管辖范围,可能很好,或者仅存储图像可能还不够。 例如,在欧洲,有910/2014号法规 ,该法规定义了什么是电子签…

mycat mysql 物理部署_一、MyCat的搭建

一、什么是mycat简单直接点就是,MyCat其实就是一个数据库的中间件!一般我们都是app直接到数据库!有了MyCat以后,就是app到MyCat然后再访问数据库。mycat是个中间件,它负责连接管理mysql,应用程序连接mycat,把mycat当作…