Django的数据库交互

首先为Django配置数据库

 

settings.py

 

 

DATABASE_ENGINE = 'mysql'           # 'postgresql_psycopg2', 'postgresql', 'mysql', 'sqlite3' or 'oracle'.
DATABASE_NAME = 'test'             # Or path to database file if using sqlite3.
DATABASE_USER = 'root'             # Not used with sqlite3.
DATABASE_PASSWORD = 'admin'         # Not used with sqlite3.
DATABASE_HOST = '192.168.0.3'             # Set to empty string for localhost. Not used with sqlite3.
DATABASE_PORT = '3306'             # Set to empty string for default. Not used with sqlite3.

 

 

 

测试配置是否成功

运行python manage.py shell

 

>>> from django.db import connection

>>> cursor=connection.cursor()

>>> ^Z

 

Ok。现在创建一个新的app

运行python manage.py startapp books

 

Python定义模型。

 

models.py

 

 

from django.db import models

# Create your models here.

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):
    salutation = models.CharField(max_length=10)
    first_name = models.CharField(max_length=30)
    last_name = models.CharField(max_length=40)
    email = models.EmailField()
    headshot = models.ImageField(upload_to='/tmp')
    
class Book(models.Model):
    title = models.CharField(max_length=100)
    authors = models.ManyToManyField(Author)
    publisher = models.ForeignKey(Publisher)
    publication_date = models.DateField()

 

 

 

安装模型

 

settings.py

 

 

INSTALLED_APPS = (
    #'django.contrib.auth',
    #'django.contrib.contenttypes',
    #'django.contrib.sessions',
    #'django.contrib.sites',
    'testsite.books',
)

 

 

 

为模型生成CREATE TABLE语句

运行python manage.py sqlall books

 

sql提交至数据库

运行python manage.py syncdb

 

运行python manage.py shell然后输入下面的代码试试:

>>> from books.models import Publisher

>>> p = Publisher(name='Apress', address='2560 Ninth St.',

... city='Berkeley', state_province='CA', country='U.S.A.',

... website='http://www.apress.com/')

>>> p.save()

>>> p = Publisher(name="O'Reilly", address='10 Fawcett St.',

... city='Cambridge', state_province='MA', country='U.S.A.',

... website='http://www.oreilly.com/')

>>> p.save()

>>> publisher_list = Publisher.objects.all()

>>> publisher_list

[<Publisher: Publisher object>, <Publisher: Publisher object>]

### Django框架与数据库交互的方法 Django 是一个功能强大的 Python Web 框架,其内置的 ORM(对象关系映射)提供了与数据库交互的便捷方法。以下是关于 Django 数据库交互的核心内容。 #### 1. 支持的数据库类型 Django 的 ORM 支持多种常用的关系型数据库,包括 PostgreSQL、MariaDB、MySQLOracle 和 SQLite3 等[^1]。这为开发者提供了灵活的选择,可以根据项目需求选择合适的数据库。 #### 2. 定义数据模型 在 Django 中,ORM 的核心是通过定义模型类来描述数据库表结构。每个模型类对应数据库中的一个表,模型字段则对应表中的列。例如: ```python from django.db import models class Person(models.Model): first_name = models.CharField(max_length=30) last_name = models.CharField(max_length=30) age = models.IntegerField() ``` 上述代码定义了一个名为 `Person` 的模型,包含三个字段:`first_name`、`last_name` 和 `age`[^1]。 #### 3. 创建索引以优化查询性能 为了提高查询效率,可以在模型字段上添加 `db_index=True` 参数来创建索引。例如: ```python class MyModel(models.Model): name = models.CharField(max_length=100, db_index=True) age = models.IntegerField() ``` 通过这种方式,可以显著加快对 `name` 字段的查询速度[^2]。 #### 4. 数据库操作的基本方法 Django ORM 提供了丰富的 API 来执行常见的数据库操作,包括增删改查等。以下是一些常用的操作示例: - **创建记录**: ```python person = Person.objects.create(first_name='John', last_name='Doe', age=30) ``` - **查询记录**: ```python # 获取所有记录 people = Person.objects.all() # 根据条件过滤记录 johns = Person.objects.filter(first_name='John') # 获取单条记录 person = Person.objects.get(id=1) ``` - **更新记录**: ```python person = Person.objects.get(id=1) person.age = 35 person.save() ``` - **删除记录**: ```python person = Person.objects.get(id=1) person.delete() ``` #### 5. 单独使用 Django ORM 如果需要在 Django 项目外部单独使用 ORM,可以通过设置环境变量和初始化 Django 来实现。例如: ```python import sys sys.path.insert(0, '/path/to/django_orm_project') import django django.setup() from app_name.models import MyModel ``` 这种设置确保了 Django ORM 能够正确加载项目配置并正常工作[^3]。 #### 6. 数据库连接管理 在某些场景下,可能需要手动管理数据库连接。例如,在长时间运行的任务中,可以显式地关闭连接以释放资源: ```python from django.db import connection connection.close() ``` ### 总结 Django ORM 提供了一种抽象化的方式,使得开发者可以轻松地与数据库进行交互,而无需直接编写 SQL 语句。通过定义模型、使用 API 和优化查询,可以高效地完成各种数据库操作。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值