Djang-Mysql配置及使用python-shell管理数据库

在开始本片博客之前,请确保您已经安装mysql和python-mysql

配置数据库:

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'test',    #选择连接的数据库,根据自己的数据库进行填写
        'USER':'root',    #填写用户名
        'PASSWORD':'123456',    #填写数据库的密码
        'Host':'127.0.0.1',
        'Port':'',
    }
}

默认是sqlite的,如果要使用mysql的要将配置改为mysql的配置

配置完成后,我们开始创建我们的应用:

python manage.py startapp blog 

进入到创建的项目blog中:cd blog

找到文件models.py进行编辑添加模块
 

class Passage(models.Model):
    name= models.CharField(max_length=30)
    author = models.CharField(max_length=20)
    pubtime = models.CharField(max_length=12)
    website = models.URLField()

    def __str__(self):
        return self.name

class Author(models.Model):
    name = models.CharField(max_length=10)
    emal = models.CharField(max_length=30)
    city = models.CharField(max_length=10)

    def __str__(self):
        return self.name

文章有属性:文章名,作者,发布时间,网址

作者有属性:姓名,邮件,城市

__str__(self):是为了在python-shell中更好的查看,当然,还有其他的作用就不再这里说了,这个函数很方便的,提倡使用

然后,我们找到settings.py文件,把我们的‘blog’模块加入进去

INSTALLED_APPS = (
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'blog',
)

接着,我们便开始将模型的数据添加到mysql中了

添加之前,先验证下模型:

python manage.py check    --验证模型

确认有效后,运行以下命令,告诉Django你对模型做了修改(这里是新建了模型)

python manage.py makemigrations blog

你应该会看到下面的输出:

Migrations for 'blog':
  0001_initial.py:
    - Create model Author
    - Create model Passage

Django把模型(数据库模式)的改动自动存储在迁移中。迁移就是磁盘中的文件。运行上述命令后,blog应用的migretions文件夹里会出现一个0001_initial.py的文件。

sqlmigrate命令的参数是迁移的名称,输出结果是相应的SQL:

python manage.py sqlmigrete blog 0001

运行后可以看见他对数据库进行的操作:

BEGIN;
CREATE TABLE `blog_author` (`id` integer AUTO_INCREMENT NOT NULL PRIMARY KEY, `name` varchar(10) NOT NULL, `emal` varchar(30) NOT NULL, `city` varchar(10) NOT NULL);
CREATE TABLE `blog_passage` (`id` integer AUTO_INCREMENT NOT NULL PRIMARY KEY, `name` varchar(30) NOT NULL, `author` varchar(20) NOT NULL, `pubtime` varchar(12) NOT NULL, `website` varchar(200) NOT NULL);

COMMIT;

Django会为各个表添加主键。即id字段

sqlmigrate并不会创建表, 其实他根本不接触数据库,只是在屏幕上输出Django即将执行的SQL。如果愿意可以将中间的SQL语句复制到数据库客户端里执行。然而,Django为提交SQL提供了更加简单的方式:

python manage.py migrate

运行这个命令后会看到以下信息:

Operations to perform:
  Synchronize unmigrated apps: staticfiles, messages
  Apply all migrations: admin, blog, contenttypes, auth, sessions
Synchronizing apps without migrations:
  Creating tables...
    Running deferred SQL...
  Installing custom SQL...
Running migrations:
  Rendering model states... DONE
  Applying contenttypes.0001_initial... OK
  Applying auth.0001_initial... OK
  Applying admin.0001_initial... 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 blog.0001_initial... OK
  Applying sessions.0001_initial... OK

可以从进入数据库看到:Django创建的数据表

当你对models.py文件做了修改后,应该将数据更新到数据库:

python manage.py makemigrations
python manage.py migrate

python-shell的使用:

python manage.py shell

导入模块:

Python 2.7.15 |Anaconda, Inc.| (default, Dec 10 2018, 21:57:18) [MSC v.1500 64 bit (AMD64)]
Type "copyright", "credits" or "license" for more information.

IPython 5.8.0 -- An enhanced Interactive Python.
?         -> Introduction and overview of IPython's features.
%quickref -> Quick reference.
help      -> Python's own help system.
object?   -> Details about 'object', use 'object??' for extra details.

In [1]: from blog.models import Author

查看其中的数据(为了显示,已经添加了两个元组):

In [2]: Author.objects.all()
Out[2]: [<Author: 代国平>, <Author: 肖尧>]

一般来说,显示的是

Out[2]: [<Author: object>, <Author: object>]

回想一下,我之前的models.py文件中是不是写了一个函数__str__(self),目的就是为了提供便利,当然也不仅仅是这个作用。

插入和更新数据:

newdata=Author(id='3',name="杨培杰",“2376020104@qq.com”,"许昌")
newdate.save()

在数据库中就能 看到新插入的数据元组了

过滤数据

因为all()是一次性从数据库中找出所有的数据,然而我们在实际的使用中是有选择的查找数据,处理他的子集。在DjangoAPI中,可以使用filter()方法来过滤数据:

Author.objects.filter(name="代国平")

`其他查找类型:

Author.objects.filter(name__contains='代')
[<Author:代国平>]

支持的其他查找类型还有icontains(不区分大小写的LIKE),startwith,endwith,range(SQL的between语句)。这里不做详细介绍。

`检索单个对象

filter()返回的是一个查询集合(列表),有时候,需要获取单个对象,此时应该使用get()方法:

Author.objects.get(id=1)
<Author: 代国平 >    #查找单个对象

-----------------------------------------------------------------------------------------
Author.objects.get(city="成都")    #得到多个对象会引发错误
Traceback(most recent call last):
...
MultipleObjectReturned:get() return more than one Author --it return 2!Lookup paraments were {'city':'成都'}
-----------------------------------------------------------------------------------------

Author.objects.get(name='不存在的人')    #查询不存在的对象也将导致异常
Traceback (most recent call last):
...
DoesNotExist: Author mathing query does not exist.

·排序数据

Author.objects.order_by("id")    #可以根据任何字段进行排序,也可以多个参数order_by("id","name")
[<Author:代国平>,<Author:肖尧>,<Author:杨培杰>]

Author.objects.order_by("-id")    #加上一个-号进行逆向排序
[<Author:杨培杰>,<Author:肖尧>,<Author:代国平>]

还有一种方法,是在modles.py的下添加:

class Meta:
    ordering=['id']

更新数据:

Author.objects.filter(name="代国平").update(eml="815787213@qq.com")

删除对象:

Author.objects.all().delete()    #删除所有
Author.objects.filter(name="杨培杰").delete()

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值