【问题标题】:PostgreSQL: Unable to drop a specific table named "user"PostgreSQL:无法删除名为“user”的特定表
【发布时间】:2017-01-05 23:08:10
【问题描述】:

我无法删除 PostgreSQL 数据库中的特定表。该表称为“用户”。当我尝试运行下面代码的 sn-p 时,

    import psycopg2
    conn = psycopg2.connect("dbname='mydatabase' user='postgres' host='localhost' password='mypassword'")
    cur = conn.cursor()
    cur.execute("DROP TABLE user;")  
    conn.commit()
    conn.close()

它吐出以下错误

  Traceback (most recent call last):
    File "dev_psycog.py", line 20, in <module>
       cur.execute("DROP TABLE user;")  
  psycopg2.ProgrammingError: syntax error at or near "user"
  LINE 1: DROP TABLE user;

我可以删除数据库中的任何其他表,但我似乎无法删除名为“用户”的表。是因为“用户”是reserved keyword吗?

【问题讨论】:

  • 试试drop table 'user'
  • 所以当我用单引号包裹它时,我遇到了类似的错误。但是当我用双引号包裹它时它起作用了。谢谢

标签: python sql postgresql psycopg2


【解决方案1】:

引用“用户”如下

import psycopg2
conn = psycopg2.connect("dbname='mydatabase' user='postgres' host='localhost' password='mypassword'")
cur = conn.cursor()
cur.execute('DROP TABLE "user";')  
conn.commit()
conn.close()

here

还有第二种标识符:分隔标识符或 带引号的标识符。它是由一个任意序列组成的 双引号 (") 中的字符。

【讨论】:

  • 用双引号包裹用户就可以了。单引号仍然给出了我遇到的相同错误。谢谢
  • @user3635123 如果解决了您的问题,请接受作为答案
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-11-10
  • 2018-05-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多