首页 > 编程语言 >python初试二

python初试二

时间:2023-12-15 19:06:31浏览次数:31  
标签:初试 Creating python west 数据库 Django MySQL table

连接数据库

Django为多种数据库后台提供了统一的调用API。根据需求不同,Django可以选择不同的数据库后台。MySQL算是最常用的数据库。我们这里将Django和MySQL连接。

在Linux终端下启动mysql:

$mysql -u root -p

在MySQL中创立Django项目的数据库:

mysql> CREATE DATABASE villa DEFAULT CHARSET=utf8;

这里使用utf8作为默认字符集,以便支持中文。

在MySQL中为Django项目创立用户,并授予相关权限:

mysql> GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, INDEX, ALTER, CREATE TEMPORARY TABLES, LOCK TABLES ON villa.* TO 'vamei'@'localhost' IDENTIFIED BY 'vameiisgood';

在settings.py中,将DATABASES对象更改为:

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'villa',
        'USER': 'vamei',
        'PASSWORD': 'vameiisgood',
        'HOST':'localhost',
        'PORT':'3306',
    }
}

后台类型为mysql。上面包含数据库名称和用户的信息,它们与MySQL中对应数据库和用户的设置相同。Django根据这一设置,与MySQL中相应的数据库和用户连接起来。此后,Django就可以在数据库中读写了。


创立模型

MySQL是关系型数据库。但在Django的帮助下,我们不用直接编写SQL语句。Django将关系型的表(table)转换成为一个类(class)。而每个记录(record)是该类下的一个对象(object)。我们可以使用基于对象的方法,来操纵关系型的MySQL数据库。

在传统的MySQL中,数据模型是表。在Django下,一个表为一个类。表的每一列是该类的一个属性。在models.py中,我们创建一个只有一列的表,即只有一个属性的类:

from django.db import models

class Character(models.Model):
    name = models.CharField(max_length=200)
    def __unicode__(self):
        return self.name

类Character定义了数据模型,它需要继承自models.Model。在MySQL中,这个类实际上是一个表。表只有一列,为name。可以看到,name属性是字符类型,最大长度为200。

类Character有一个__unicode__()方法,用来说明对象的字符表达方式。如果是Python 3,定义__str__()方法,实现相同的功能。

命令Django同步数据库。Django根据models.py中描述的数据模型,在MySQL中真正的创建各个关系表:

$python manage.py syncdb

同步数据库后,Django将建立相关的MySQL表格,并要求你创建一个超级用户:

Creating tables ...
Creating table django_admin_log
Creating table auth_permission
Creating table auth_group_permissions
Creating table auth_group
Creating table auth_user_groups
Creating table auth_user_user_permissions
Creating table auth_user
Creating table django_content_type
Creating table django_session
Creating table west_character

You just installed Django's auth system, which means you don't have any superusers defined.
Would you like to create one now? (yes/no): yes
Username (leave blank to use 'tommy'): vamei
Email address: [email protected]
Password:
Password (again):
Superuser created successfully.
Installing custom SQL ...
Installing indexes ...
Installed 0 object(s) from 0 fixture(s)

数据模型建立了。打开MySQL命令行:

$mysql -u vamei -p

查看数据模型:

USE villa;
SHOW TABLES;
SHOW COLUMNS FROM west_character;

最后一个命令返回Character类的对应表格:

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

| Field | Type         | Null | Key | Default | Extra          |

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

| id    | int(11)      | NO   | PRI | NULL    | auto_increment |

| name  | varchar(200) | NO   |     | NULL    |                |

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

2 rows in set (0.00 sec)

可以看到,Django还自动增加了一个id列,作为记录的主键(Primary Key)。


显示数据

数据模型虽然建立了,但还没有数据输入。为了简便,我们手动添加记录。打开MySQL命令行,并切换到相应数据库。添加记录:

INSERT INTO west_character (name) Values ('Vamei');
INSERT INTO west_character (name) Values ('Django');
INSERT INTO west_character (name) Values ('John');

查看记录:

SELECT * FROM west_character;

 

可以看到,三个名字已经录入数据库。

下面我们从数据库中取出数据,并返回给http请求。在west/views.py中,添加视图。对于对应的请求,我们将从数据库中读取所有的记录,然后返回给客户端:

# -*- coding: utf-8 -*-

from django.http import HttpResponse

from west.models import Character

def staff(request):
    staff_list = Character.objects.all()
    staff_str  = map(str, staff_list)
    return HttpResponse("<p>" + ' '.join(staff_str) + "</p>")

可以看到,我们从west.models中引入了Character类。通过操作该类,我们可以读取表格中的记录

为了让http请求能找到上面的程序,在west/urls.py增加url导航:

from django.conf.urls import patterns, include, url

urlpatterns = patterns('',
    url(r'^staff/','west.views.staff'),
)

运行服务器。在浏览器中输入URL:

127.0.0.1:8000/west/staff

查看效果:

python初试二_mysql

标签:初试,Creating,python,west,数据库,Django,MySQL,table
From: https://blog.51cto.com/u_15974582/8843551

相关文章

  • Python多线程编程:竞争问题的解析与应对策略
    本文将深入探讨Python多线程编程中可能出现的竞争问题、问题根源以及解决策略,旨在帮助读者更好地理解、应对并发编程中的挑战。多线程竞争问题的复杂性源自于对共享资源的并发访问和操作。在不同线程间的交叉执行中,共享资源可能因无序访问而导致数据不一致、死锁或饥饿等问题。解决......
  • 【创意、创造】用 Python pandas做一个读取Excel,再写入新的Excel小工具
    Python很好很强大,1.5天时间,简化很多重复的劳动,哈哈~ importpandasaspdimportdatetimeasdtdefhandleFrontEnd():#处理【上周前端发版】开始sheet_front_end=pd.read_excel('D:\某前端原文件.xlsx',sheet_name='Sh......
  • python flask 生产环境部署,基于gunicorn
    1.安装gunicorn,部分生产服务器会存在多个pip版本,一般用pip和pip3区分,本文中用pippipinstallgunicorn2.启动程序cd/usr/appgunicorn--workers2-b0.0.0.0:5056app:app 验证项目正常后继续如下操作3.配置gunicorn配置文件查看centos版本cat/etc/redhat-releas......
  • python3 操作csv
    https://blog.csdn.net/m0_46483236/article/details/109583685 1.python中创建新的csv文件(1).使用csv.writer()创建:代码如下:importcsvheaders=['学号','姓名','分数']rows=[('202001','张三','98'),('20200......
  • python_控制台输出带颜色的文字方法
    在python开发的过程中,经常会遇到需要打印各种信息。海量的信息堆砌在控制台中,就会导致信息都混在一起,降低了重要信息的可读性。这时候,如果能给重要的信息加上字体颜色,那么就会更加方便用户阅读了。当然了,控制台的展示效果有限,并不能像前段一样炫酷,只能做一些简单的设置......
  • python之chardet操作 编码&解码
    #python之编码&解码"""python中有两种类型,字符串和字节但是字节的编码是什么我们不知道,所以解码不好解决,chardet解决了这个问题pipinstallchardet"""#字节--->字符串importchardettemp_bytes=b'helloword'temp_str=temp_bytes.decode("utf8")print(f&quo......
  • Python 异步编程之yield关键字
    背景介绍在前面的篇章中介绍了同步和异步在IO上的对比,从本篇开始探究python中异步的实现方法和原理。python协程的发展流程:python2.5为生成器引用.send()、.throw()、.close()方法python3.3为引入yieldfrom,可以接收返回值,可以使用yieldfrom定义协程Python3.4加入了asy......
  • 12.15---python文件读取
    withopen('pi_digits.txt')asfile:contents=file.read()print(contents.strip())要想访问文件内容需要先打开它才能访问,函数open()接受一个参数:要打开文件的名称。在当前执行文件的目录中查找文件名。代码中,open('E:/python/文件和异常/pi_digits.txt')返回一个表示......
  • python二分类模型精度低怎么办
    在二分类模型中,如果模型的精度较低,可能需要采取一些措施来改进模型性能。本文将介绍一些常见的方法和技巧,帮助提高二分类模型的精度。1.数据预处理确保对数据进行适当的预处理是提高模型精度的重要步骤。常见的数据预处理方法包括:-数据清洗:处理缺失值、异常值等。-特征选择:选择对目......
  • 如何在 python 中安装 torch
    PyTorch是一款功能强大的深度学习框架,它提供了丰富的工具和接口来支持各种深度学习任务。本文将介绍在Python中安装PyTorch的步骤和方法,以帮助读者快速开始使用PyTorch。1.安装Python首先,确保你的计算机上已经安装了Python。建议使用Python的最新版本,可以从官方下载并安装Python。2......