簡體   English   中英

SQL命令更新表中的列值

[英]SQL command to update column value in table

以下是python manage shell代碼

>>> User.objects.filter(email__icontains="gmail.com").values_list("email", flat=True)
[u'abc@gmail.com', u'vivekbsable@gmail.com', u'vivek@gmail.com', u'xyz@gmail.com', u'vivekbsable@gmail.com']
>>> for ii in User.objects.filter(email__icontains="gmail.com"):
...      ii.email = ii.email.replace("@gmail.com", "@custom.com")
...      ii.save() 
...     
... 
>>> User.objects.filter(email__icontains="gmail.com").values_list("email", flat=True)
[]
>>> User.objects.filter(email__icontains="@custom.com").values_list("email", flat=True)
[u'vivek@custom.com', u'xyz@custom.com', u'abc@custom.com', u'vivekbsable@custom.com', u'vivekbsable@custom.com']
>>>

我想在Postgresql終端中編寫SQL命令( python manage dbshell

如何在SQL命令中進行上述轉換?

以下是我的嘗試:

[編輯1]

通過SQL命令獲取目標電子郵件ID:

dp=# SELECT  email FROM auth_user where email LIKE '%@gmail.com';
           email           
---------------------------
 vivek@gmail.com
 xyz@gmail.com
 abc@gmail.com
 vivekbsable@gmail.com
 vivekbsable@gmail.com
(5 rows)

dp=# 

如何在SQL命令中進行上述轉換?

您可以查看Django為此生成的查詢,它可能無法像其中那樣運行(例如Django發送的缺少參數),但是它將使您對Django如何將其轉換為SQL有了一個很好的了解

想法是打印此值: Model.objects.filter(...).values_list(...).query

query = User.objects.filter(email__icontains="@custom.com").values_list("email", flat=True).query

# Make it print it
print query 
print(query) # Python 3 or with "from future import print_function"

因此,您想替換電子郵件中的域,這是測試選擇:

select email, replace(email, '@gmail.com', '@custom.com') as new_email 
from auth_user 
where email like '%@gmail.com';

並將更新為:

update auth_user 
set email = replace(email, '@gmail.com', '@custom.com') 
where email like '%@gmail.com';

以下是我的解決方案:

UPDATE auth_user Set email = replace(email, '@gmail.com', '@custom.com') where email LIKE '%@gmail.com';

演示:

進入dbshel​​l 1. cd / var / op / project_name python manage dbshell

dp=# SELECT  email FROM auth_user where email LIKE '%@gmail.com';
           email           
---------------------------
 vivek@gmail.com
 xyz@gmail.com
 abc@gmail.com
 vivekbsable@gmail.com
 vivekbsable@gmail.com
(5 rows)

dp=# SELECT  email FROM auth_user where email LIKE '%@custom.com';
 email 
-------
(0 rows)

dp=# UPDATE auth_user Set email = replace(email, '@gmail.com', '@custom.com') where email LIKE '%@gmail.com';
UPDATE 5

dp=# SELECT  email FROM auth_user where email LIKE '%@gmail.com';
 email 
-------
(0 rows)

dp=# SELECT  email FROM auth_user where email LIKE '%@custom.com';
           email            
----------------------------
 vivek@custom.com
 xyz@custom.com
 abc@custom.com
 vivekbsable@custom.com
 vivekbsable@custom.com
(5 rows)

dp=# 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM