【问题标题】:deleting sql code with python and selecting from JOIN用python删除sql代码并从JOIN中选择
【发布时间】:2017-12-17 15:44:54
【问题描述】:

我已删除此帖子,因为它包含泄露信息。

【问题讨论】:

  • 能否请您包含exact 错误?
  • Traceback(最近一次调用最后):文件“/home/pi/Desktop/praciticing_sql.py”,第 34 行,在 read_from_db() 文件“/home/pi/Desktop/praciticing_sql .py",第 24 行,在 read_from_db c.execute("SELECT first_name, job FROM family JOIN jobs ON jobs.first_name = family.first_name WHERE job = 'YES'") sqlite3.OperationalError: ambiguous column name: first_name
  • 欢迎来到 SO!如此处所示,准确的错误很重要; “模棱两可”与未知有很大不同。始终在帖子正文中提供准确的错误(不是 cmets)。

标签: python sql python-3.x sqlite


【解决方案1】:

您的查询中有两个表,其中包含“名字”字段。您的查询需要指定您要引用哪一个。

将您的选择行替换为

SELECT jobs.first_name, job FROM family....

【讨论】:

    【解决方案2】:

    您已经在使用 CREATE TABLE IF NOT EXISTS,但将所有四个创建/插入函数包装到数据库内容检查中可能会更容易:

    if not table_exists(conn, "family"):
        conn.execute("BEGIN")
        with conn:
            create_table1()
            create_table2()
            data_entry1()
            data_entry2()
    
    read_from_db()
    

    列名first_name 不明确,因为它出现在两个表中。 当您使用 USING 加入时,数据库将自动删除重复的列:

    c.execute("""SELECT first_name, job
                 FROM family
                 JOIN jobs USING (first_name)
                 WHERE job = 'YES'""")
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-02-09
      • 2014-06-14
      • 1970-01-01
      相关资源
      最近更新 更多