『壹』 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