• Django:数据库表的建立与增删查改(ForeignKey和ManytoMany)


    数据库表的创建:

    1、Django工程项目建立,基础环境调试。

    2、创建表
    from django.db import models

    class Publisher(models.Model):
        name = models.CharField(max_length=30)
        address = models.CharField(max_length=50)
        city = models.CharField(max_length=60)
        state_province = models.CharField(max_length=30)
        country = models.CharField(max_length=50)
        website = models.URLField()

    class Author(models.Model):
        first_name = models.CharField(max_length=30)
        last_name = models.CharField(max_length=40)
        email = models.EmailField()

    class Book(models.Model):
        title = models.CharField(max_length=100)
        authors = models.ManyToManyField(Author)
        publisher = models.ForeignKey(Publisher)#定义外键的时候,在创建该表时,数据库自动的会增加_id在其名字后面,即publisher_id
        publication_date = models.DateField()
    3、告诉整个项目,激活该model.py文件,在项目setting.py中进行激活:
    INSTALLED_APPS = (
        'app.books',
    )
    4、在shell中验证model代码的正确性,验证无误后,执行代码,将其转换为sql语言:
    python manage.py validate
    python manage.py sqlall books
    validate 命令检查你的模型的语法和逻辑是否正确。 如果一切正常,你会看到 0 errors found 消息。
    5、同步到数据库中,syncdb仅仅创建数据库里还没有的表,它 并不 对你数据模型的修改进行同步,也不处理数据模型的删除
    python manage.py syncdb
    python manage.py migrate
     
    数据库的增删查改:
    1、插入记录
    p1 = Publisher(name='Apress', address='2855 Telegraph Avenue',
    ...     city='Berkeley', state_province='CA', country='U.S.A.',
    ...     website='http://www.apress.com/')
    >>> p1.save()
     
    >>> Publisher.objects.filter(id=52).update(name='Apress Publishing')
    save()每次都更新所有列,update()则每次更新指定列
    2、关键字查询
    Publisher.objects.filter(name='Apress')
    上面的例子中``
    filter()`` 函数返回一个记录集,这个记录集是一个列表。 相对列表来说,有些时候我们更需要获取单个的对象, `` get()``
    方法就是在此时使用的:
    Publisher.objects.get(name="Apress")
    3、数据集合排序
    >>>Publisher.objects.order_by("name")
    >>> Publisher.objects.order_by("-name") #倒序
    4、删除记录
    Publisher.objects.filter(country='USA').delete()
    执行数据库的SQL命令
    1.导入django.db的connection模块,建立与数据库的链接,在之前一定要在settings.py上设置好数据库,并且执行
    python manage.py syncdb同步数据库
    >>> from django.db import connection
    >>> cursor=connection.cursor()
    如果不在django框架下,连接数据库的操作为:

    import MySQLdb conn=MySQLdb.connect(host="localhost",user="root",passwd="123",db="mydatabase")

    cursor=conn.cursor()

    2.设置SQL命令:

    >>> cursor.execute("""
    ... SELECT DISTINCT first_name
    ... FROM books_author
    ... WHERE last_name = %s""",['miao'])

    3.执行命令:

    >>> row = cursor.fetchone()

    cursor对象用拥有的方法如下:

    cursor用来执行命令的方法:
    callproc(self, procname, args):用来执行存储过程,接收的参数为存储过程名和参数列表,返回值为受影响的行数
    execute(self, query, args):执行单条sql语句,接收的参数为sql语句本身和使用的参数列表,返回值为受影响的行数
    executemany(self, query, args):执行单条sql语句,但是重复执行参数列表里的参数,返回值为受影响的行数
    nextset(self):移动到下一个结果集
     
    cursor用来接收返回值的方法:
    fetchall(self):接收全部的返回结果行.
    fetchmany(self,
    size=None):接收size条返回结果行.如果size的值大于返回的结果行的数量,则会返回cursor.arraysize条数据.
    fetchone(self):返回一条结果行.
    scroll(self,
    value,
    mode='relative'):移动指针到某一行.如果mode='relative',则表示从当前所在行移动value条,如果mode='absolute',则表示从结果集的第一
    行移动value条.
  • 相关阅读:
    查看yarn当前执行任务列表
    小白学开发(iOS)OC_ 字符串的获取 (2015-08-11)
    【leetcode】Search in Rotated Sorted Array (hard)
    【leetcode】Spiral Matrix II (middle)
    【leetcode】Spiral Matrix(middle)
    【leetcode】Reverse Bits(middle)
    【leetcode】Number of 1 Bits (easy)
    【leetcode】Set Matrix Zeroes(middle)
    【leetcode】Reorder List (middle)
    【leetcode】Reverse Linked List II (middle)
  • 原文地址:https://www.cnblogs.com/weiming-cheng/p/5315430.html
Copyright © 2020-2023  润新知