【问题标题】:SQL command to update column value in tableSQL命令更新表中的列值
【发布时间】:2015-12-02 22:04:48
【问题描述】:

以下是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=# 

【问题讨论】:

    标签: python sql django postgresql


    【解决方案1】:

    如何在 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"
    

    【讨论】:

    • 谢谢你,赞成。我也添加了我的答案,您可以按答案查看吗?
    【解决方案2】:

    所以你想替换电子邮件中的域,这里是测试选择:

    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';
    

    【讨论】:

    • @谢谢,赞成。我也添加了我的答案,您可以查看我的答案吗?
    【解决方案3】:

    以下是我的解决方案:

    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=# 
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-06-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多