Django里面,管理数据库和sqlarchemy类似,也是通过orm框架来实现的。所有的数据库的建立,都是在modelpy里面通过类来实现的。
首先看看如何创建一个单表:
a 先定义一个类,继承modelsModel, 然后根据需求定义参数,这些参数的类型和变量后面会进一步阐述
modelspy
from djangodb import models
class UserInfo(modelsModel):
username = modelsCharField(max_length=32)
password = modelsCharField(max_length=64)
b 注册app
settingspy
INSTALLED_APPS = [
‘djangocontribadmin‘,
‘djangocontribauth‘,
‘djangocontribcontenttypes‘,
‘djangocontribsessions‘,
‘djangocontribmessages‘,
‘djangocontribstaticfiles‘,
‘app01‘,
]
c执行命令。 第一条命令会生成一个初始化文件,第二个命令会生成对应的表
python managepy makemigrations
python managepy migrate
这样,就在PyCharm自带的sqlite数据库里面成功的生成了一个app01_UserInfo的表。这个表默认会有一个自增的id作为主键,另外两个字段是我们通过类创建的。
d 如果希望使用mysql,因为Django默认使用了MySqldb模块,这个在30版本里面不存在,会直接报错。我们需要改为pymysql的模块,方法如下:
在project同名文件夹下的__init__文件中添加如下代码即可:
import pymysql
pymysqlinstall_as_MySQLdb()
2 对于单表的增删改查询
查询
获取所有结果,获取到的结果是一个QuerySet的类似列表的对象,每一个元素本身又是一个对象,包括了id,name,password等属性。
obj = modelsUserInfoobjectsall()
<QuerySet [<UserInfo: UserInfo object>, <UserInfo: UserInfo object>, <UserInfo: UserInfo object>, <UserInfo: UserInfo object>, <UserInfo: UserInfo object>]>
可以通过filter进行过滤,相当于sql的where语句,因为结果也是QuerySet,因此需要再使用first()获取第一个值
obj = modelsUserInfoobjectsfilter(id=nid)first()
增加
modelsUserInfoobjectscreate(username=u,password=p,user_group_id=3)
删除,可以在filter的基础上进行删除
modelsUserInfoobjectsfilter(id=nid)delete()
修改,有两种常见方式
第一个方式
modelsUserInfoobjectsfilter(id=nid)update(username=u,password=p)
第二个方式
obj=modelsUserInfoobjectsfilter(id=nid)
objusername=u
objsave()
从Java web转过来学习django,有些方法逻辑不习惯,直接修改model更新到数据库:执行如下命令即可 python managepy makemigrations myapp python managepy migrate
一般写在模型中,也就是models
如果你要使用django自带的orm,那么需要去读一读django模型方面的资料
这里举个简单的例子:
class User(modelsModel):username = modelsCharField(verbose_name='用户名',max_length=20)
password = modelsCharField(verbose_name='密码',max_length=20)
def __unicode__(self):
return selfusername
这里定义的User类,在建模完成后,在数据库中对应就是app_User表,如果需要查询,那么
Userobjectsfilter(all) #所有行
更新:
p = Userobjectsget('username='name'')
p = 'name1'
psave()
删除:
Userobjectsget('username='name'')delete()
如果不用自带的ORM,那么用mysqldb模块来处理,这个没有什么可说的,使用标准sql语句即可
多个数据库联用时数据导入导出
使用的时候和一个数据库的区别是:
如果不是defalut(默认数据库)要在命令后边加 --database=数据库对应的settingspy中的名称 如: --database=db1 或 --database=db2
数据库同步(创建表)
python managepy syncdb #同步默认的数据库,和原来的没有区别
#同步数据库 db1 (注意:不是数据库名是db1,是settingspy中的那个db1,不过你可以使这两个名称相同,容易使用)
python managepy syncdb --database=db1
数据导出
python managepy dumpdata app1 --database=db1 > app1_fixturejson
python managepy dumpdata app2 --database=db2 > app2_fixturejson
python managepy dumpdata auth > auth_fixturejson
数据库导入
python managepy loaddata app1_fixturejson --database=db1
python managepy loaddata app2_fixturejson --database=db2
在网上看到都是使用Django的models和makemigration,migrate命令来创建新表,并使用。可是我的数据已经存在了已经创建好,并且已经存储有数据了,不能再重新创建新表了。了解Django的表明和models名称的映射关系就可以让Django使用已经存在的表。
假如在Django存在models如下:
[python] view plain copy
from djangodb import models
# Create your models here
class Sciencenews(modelsModel):
id = modelsCharField(max_length=36,primary_key=True)
first_module = modelsCharField(max_length=30,default="News")
second_module = modelsCharField(max_length=30,default="Latest News")
title = modelsCharField(max_length=300)
author = modelsCharField(max_length=60,null=True)
publish_date = modelsCharField(max_length=35,null=True)
content = modelsTextField(null=True)
crawl_date = modelsCharField(max_length=35,null=True)
from_url = modelsCharField(max_length=350,null=True)
执行数据迁移命令:[python] view plain copy
python managepy makemigration
python managepy migrate
会在数据库中生成名称为show_sciencenews的数据表。show为应用名称,此处我的应用名称为show。可以看到Django创建表的命名规则:应用名_模型名。我的存储爬取到的数据的表格名称原来为science_news,想要Django使用它,而不是创建新的表,只需要把的它的名称改为:应用名_要与该表映射的models名称,在此处我改为show_sciencenews。然后使用如上的数据迁移命令,这时可能会提示数据表已经存在的错误,不用理会,models已经和数据表映射上了。接下来只需要正常使用models和数据表就可以了。
以上就是关于django orm创建数据表全部的内容,包括:django orm创建数据表、django1.8更改了model后要怎样重建数据库、使用Django常见了一个app,并连上了一个数据库,对这个数据库进行增删改查的代码应该编写在哪个文件中等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)