‘壹’ SQL数据库update字段应用问题
用stuff(a,b,c,d)函数 a表示列名, b表示起始位置,c表示长度 ,d表示要替换成的内容,
写法如下
update 用户资源信息表 set 用户地址 = stuff(用户地址,1,2,'A1') where 用户地址 is (select 用户地址 from 用户资源信息表 where 节点名称 like '老大社区三期%%' and 用户地址 like '16%')
‘贰’ django怎么修改已经存在的数据库(django数据库增删改查)
今天首席CTO笔记来给各位分享关于django怎么修改已经存在的数据库的相关内容,其中也会对django数据库增删改查进行详细介绍,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!
本文目录一览:
1、django1.8更改了model后要怎样重建数据库2、Django的多数据库问题,怎么解决3、django使用已有的数据库表怎么建立model4、django中怎么动态操作数据库字段?5、如何将django中的sqlite3换成mysql6、如何在django中使用多个数据库django1.8更改了model后要怎样重建数据库#?如果你说用的是pycharm编译器的话:
使用?ctrl+alt+r?进入?manage界面
然后输入?makemigrations?[appname]?创建数据库引导文件
然后使用?migrate?[appname]?来把model变化同步到数据库
#?[appname]?指你当前model所在的app,如果不指定appname?;则编译全部app
#?如果不是pycharm编译器的话,请再追问
Django的多数据库问题,怎么解决选择开始菜单中→程序→【Management SQL Server 2008】→【SQL Server Management Studio】命令,打开【SQL Server Management Studio】窗口,并使用Windows或 SQL Server身份验证建立连接。
在【对象资源管理器】窗口中展开服务器,然后选择【数据库】节点
右键单击【数据库】节点,从弹出来的快捷菜单中选择【新建数据库】命令。
执行上述操作后,会弹出【新建数据库】对话框。在对话框、左侧有3个选项,分别是【常规】、【选项】和【文件组】。完成这三个选项中的设置会后,就完成了数据库的创建工作,
在【数据库名称】文本框中输入要新建数据库的名称。例如,这里以“新建的数据库”。
在【所有者】文本框中输入新建数据库的所有者,如sa。根据数据库的使用情况,选择启用或者禁用【使用全文索引】复选框。
在【数据库文件】列表中包括两行,一行是数据库文件,而另一行是日记文件。通过单击下面的【添加】、【删除】按钮添加或删除数据库文件。
切换到【选项页】、在这里可以设置数据库的排序规则、恢复模式、兼容级别和其他属性。
切换到【文件组】页,在这里可以添加或删除文件组。
完成以上操作后,单击【确定】按钮关闭【新建数据库】对话框。至此“新建的数据”数据库创建成功。新建的数据库可以再【对象资源管理器】窗口看到。
django使用已有的数据库表怎么建立model
在网上看到都是使用Django的models和makemigration,migrate命令来创建新表,并使用。可是我的数据已经存在了已经创建好,并且已经存储有数据了,不能再重新创建新表了。了解Django的表明和models名称的映射关系就可以让Django使用已经存在的表。
假如在Django存在models如下:
[python]?view plain?
from?django.db?import?models
#?Create?your?models?here.
class?Sciencenews(models.Model):
id?=?models.CharField(max_length=36,primary_key=True)
first_mole?=?models.CharField(max_length=30,default="News")
second_mole?=?models.CharField(max_length=30,default="Latest?News")
title?=?models.CharField(max_length=300)
author?=?models.CharField(max_length=60,null=True)
publish_date?=?models.CharField(max_length=35,null=True)
content?=?models.TextField(null=True)
crawl_date?=?models.CharField(max_length=35,null=True)
from_url?=?models.CharField(max_length=350,null=True)
执行数据迁移命令:
[python]?view plain?
python?manage.py?makemigration
python?manage.py?migrate
会在数据库中生成名称为show_sciencenews的数据表。show为应用名称,此处我的应用名称为show。可以看到Django创建表的命名规则:应用名_模型名。
我的存储爬取到的数据的表格名称原来为science_news,想要Django使用它,而不是创建新的表,只需要把的它的名称改为:应用名_要与该表映射的models名称,在此处我改为show_sciencenews。然后使用如上的数据迁移命令,这时可能会提示数据表已经存在的错误,不用理会,models已经和数据表映射上了。接下来只需要正常使用models和数据表就可以了。
django中怎么动态操作数据库字段?django的ORM系统不支持修改删除字段的操作,也就是说你在写模型model文件的时候,比如说定义了这个user表,然后包含字段telphone定义,你一旦执行了manage.py syncdb 这个操作,就把表结构往数据库写死了,如果你之是删除了model文件的telphone,数据库是不被重新修改的。这个时候必须用原生SQL解决,也就是说自己写SQL语句让django执行,这样的话会出很多问题,也就是说你执行了alter table users drop column telphone之后,你的model文件不知道你已经对users表结构做了修改,这样会出直接导致django应用的崩溃。所以动态字段不好做。也可能是我才疏学浅,没太理解,也许有高人能做到。不过面对ORM这样的尽量别删除字段。
如何将django中的sqlite3换成mysqldjango
数据库使用(sqlite3和mysql)
一、sqlite3
使用
1、import
sqlite3
确认系统中是否安装
2、进入当前项目目录,cmd后运行python,进入命令行模式
3、import
sqlite3,
sqlite3.connect('{path ame.db}')
#大括号内表示自定义,真实情况没有大括号
4、修改settings.py文件
DATABASES
=
{
'default':
{
'ENGINE':
'django.db.backends.sqlite3',
'NAME':
{path ame.db}',
'USER':
'',
'PASSWORD':
'',
'HOST':
'',
'PORT':
'',
}
}
5、进入数据库文件界面,运行python
manage.py
shell
from
django.db
import
connection
cur
=
connection.cursor()
如果没报错,则表示配置成功
6、修改models.py文件,配置自己的表
例如:
from
django.db
import
models
from
django.contrib
import
admin
#
Create
your
models
here.
class
BlogPost(models.Model):
title
=
models.CharField(max_length
=
150)
body
=
models.TextField()
timestamp
=
models.DateTimeField()
class
Meta:
ordering
=
['-timestamp']
7、创建数据库内容
python
manage.py
syncdb
根据提示输入,表示连接成功
注:以上只表示对数据库的创建,连接和使用,不包含其它内容。
二、mysql
1、确认安装mysql数据库
2、在mysql中创建数据库
命令模式下可以使用
CREATE
DATABASE
{name}
DEFAULT
CHARSET=utf8;
3、修改settings.py文件
DATABASES
=
{
'default':
{
'ENGINE':
'django.db.backends.mysql',
'NAME':
'{name}',
'USER':
'{username}',
'PASSWORD':
'{password}',
'HOST':'localhost',
#ip
'PORT':',
}
}
4、修改models.py文件,配置自己的表
例如:
from
django.db
import
models
from
django.contrib
import
admin
#
Create
your
models
here.
class
BlogPost(models.Model):
title
=
models.CharField(max_length
=
150)
body
=
models.TextField()
timestamp
=
models.DateTimeField()
class
Meta:
ordering
=
['-timestamp']
5、创建数据库内容
python
manage.py
syncdb
根据提示输入,表示连接成功
如何在django中使用多个数据库使用多个数据库
New in Django 1.2: Please, see the release notes
大多数其他文档都假设使用单一数据库,本文主要讨论如何在 Django 中使用多个数据库。 使用多个数据库,要增加一些步骤。
定义你的数据库
使用多数据库的第一步是通过 DATABASES 设置要使用的数据库服务。这个 设置用于映射数据库别名和特定的联结设置字典,这是 Django 定义数据库一贯的手法。 字典内部的设置参见 DATABASES 文档。
数据库可以使用任何别名,但是 default 有特殊意义。当没有选择其他数据库时, Django 总是使用别名为 default 的数据库。因此,如果你没有定义一个名为 default 的数据库时,你应当小心了,在使用数据库前要指定你想用的数据库。
以下是一个定义两个数据库的 settings.py 代码片断。定义了一个缺省的 PostgreSQL 数据库和一个名为 users 的 MySQL 数据库:
DATABASES = { 'default': { 'NAME': 'app_data', 'ENGINE': 'django.db.backends.postgresql_psycopg2', 'USER': 'postgres_user', 'PASSWORD': 's3krit' }, 'users': { 'NAME': 'user_data', 'ENGINE': 'django.db.backends.mysql', 'USER': 'mysql_user', 'PASSWORD': 'priv4te' } }
如果你尝试访问 DATABASES 设置中没有定义的数据库, Django 会抛出一个 django.db.utils.ConnectionDoesNotExist异常。
同步你的数据库
syncdb 管理命令一次只操作一个数据库。缺省情况下,它操作 default 数据库。但是加上 --database 参数,你可以让 syncdb 同步不同的 数据库。所以要同步我们例子中的所有数据库的所有模型可以使用如下命令:
$ ./manage.py syncdb
$ ./manage.py syncdb --database=users
如果你不是同步所有的程序到同一个数据库中,你可定义一个 数据库路由 来为指定的模型实施特定的控制 策略。
如果你要精细地控制同步,那么还有一种方式是修改 sqlall 的输出,手工在 数据库中执行命令,命令如下:
$ ./manage.py sqlall sales | ./manage.py dbshell
使用其他管理命令
其他操作数据库的 django-admin.py 命令与 syncdb 类似,他们一次只 操作一个数据库,使用 --database 来控制使用哪个数据库。
自动数据库路由
使用多数据库最简单的方法是设置一个数据库路由方案。缺省的路由方案确保对象 “紧贴”其原本的数据库(例如:一个对象从哪个数据库取得,就保存回哪个数据库)。 缺省的路由方案还确保如果一个数据库没有指定,所有的查询都会作用于 缺省 数据 库。
你不必为启动缺省路由方案作任何事,因为它是“开箱即用”的。但是,如果你要执行 一些更有趣的数据库分配行为的话,你可以定义并安装你自己的数据库路由。
数据库路由
一个数据库路由是一个类,这个类最多有四个方法:
db_for_read(model, **hints)
建议 model 对象写操作时使用的数据库。
如果一个数据库操作可以提供对选择数据库有用的附加信息,那么可以通过 hints 字典提供。详见 下文 。
如果没有建议则返回 None 。
db_for_write(model, **hints)
建议 model 对象读操作时使用的数据库。
如果一个数据库操作可以提供对选择数据库有用的附加信息,那么可以通过 hints 字典提供。详见 下文 。
如果没有建议则返回 None 。
allow_relation(obj1, obj2, **hints)
当 obj1 和 obj2 之间允许有关系时返回 True ,不允许时返回 False ,或者没有 意见时返回 None 。这是一个纯粹的验证操作,用于外键和多对多操作中,两个对象 的关系是否被允许。
allow_syncdb(db, model)
决定 model 是否可以和 db 为别名的数据库同步。如果可以返回 True , 如果不可以返回 False ,或者没有意见时返回 None 。这个方法用于决定一个给定 数据库的模型是否可用。
一个路由不必提供 所有 这些方法,可以省略其中一个或多个。如果其中一个方法被 省略了,那么 Django 会在执行相关检查时跳过相应路由。
提示参数
数据库路由接收的“提示”参数可用于决定哪个数据库应当接收一个给定的请求。
目前,唯一可以提供的提示参数是 实例 ,即一个与读写操作相关的对象的实例。 可以是一个已保存的对象的实例,也可以是一个多对多关系中添加的实例。在某些情况下, 也可能没有对象的实例可以提供。路由会检查提示实例是否存在,并相应地决定是否改变 路由行为。
使用路由
数据库路由使用 DATABASE_ROUTERS 设置来安装。这个设置定义一个类名称 列表,每个类定义一个用于主路由 (django.db.router) 的路由。
主路由用于 Django 分配数据库操作。当一个查询想要知道使用哪个数据库时,会提供 一个模型和一个提示(如果有的话),并调用主路由。
Django 就会按次序尝试每个路由,
直到找到合适的路由建议。如果找不到路由建议就会尝试实例提示的当前的 _state.db 。如果没有提供路由提示,或者实例没有当前数据库状态,那么
主路由会 分配 缺省 数据库。
一个例子
仅用于示例目的!
这个例子仅用于展示路由如何改变数据库的使用。本例有意忽略了一些复杂的东西以 便于更好的展示路由是如何工作的。
如果任何一个 myapp 中的模型包含与 另一个 数据库中模型的关系时,本例 是无效的。参见 跨数据库关系一节中介绍 的 Django 引用完整性问题。
本例的主/从配置也是有缺陷的:它没有处理复制延时(比如因为把写操作传递给从 数据库耗费时间而产生的查询不一致),也没有考虑与数据库使用策略的交互作用。
那么,这个例子有什么用呢?本例仅用于演示一个 myapp 存在于 other 数据库, 所有其他模型之间是主/从关系,且存在于 master 、 slave1 和 slave2 数据库。本例使用了两个路由:
class MyAppRouter(object): """ 一个控制 myapp 应用中模型的所有数据库操作的路由 """ def db_for_read(self, model, **hints): "myapp 应用中模型的操作指向 'other'" if model._meta.app_label == 'myapp': return 'other' return None def db_for_write(self, model, **hints): "myapp 应用中模型的操作指向 'other'" if model._meta.app_label == 'myapp': return 'other' return None def allow_relation(self, obj1, obj2, **hints): " 如果包含 myapp 应用中的模型则允许所有关系 " if obj1._meta.app_label == 'myapp' or obj2._meta.app_label == 'myapp': return True return None def allow_syncdb(self, db, model): " 确保 myapp 应用只存在于 'other' 数据库 " if db == 'other': return model._meta.app_label == 'myapp' elif model._meta.app_label == 'myapp': return False return None class MasterSlaveRouter(object): """ 一个设置简单主/从定义的路由 """ def db_for_read(self, model, **hints): " 所有读操作指向一个随机的从数据库 " return random.choice(['slave1','slave2']) def db_for_write(self, model, **hints): " 所有写操作指向主数据库 " return 'master' def allow_relation(self, obj1, obj2, **hints): " 允许数据库池中的两个对象间的任何关系 " db_list = ('master','slave1','slave2') if obj1._state.db in db_list and obj2._state.db in db_list: return True return None def allow_syncdb(self, db, model): " 显示地放置所有数据库中的模型 " return True
然后在你的设置文件增加如下内容(把 path.to. 替换为你定义路由的模型的路径 ):
DATABASE_ROUTERS = ['path.to.MyAppRouter', 'path.to.MasterSlaveRouter']
这个设置中,路由的顺序是很重要的,因为查询时是按这个设置中的顺序依次查询的。上 例中, MyAppRouter 先于MasterSlaveRouter ,因此, myapp 中的模型就 优先于其他模型。如果 DATABASE_ROUTERS 设置中两个路由的顺序变换了, 那么 MasterSlaveRouter.allow_syncdb() 会优先执行。因为 MasterSlaveRouter 是 包罗万象的,这样就会导致所有模型可以使用所有数据库。
设置好之后让我们来运行一些代码:
# 从 'credentials' 数据库获得数据fred = User.objects.ge