【问题标题】:How to get columns name in mysqldb with a Python 2.7?如何使用 Python 2.7 获取 mysqldb 中的列名?
【发布时间】:2018-04-27 04:10:56
【问题描述】:

如果我使用 select * from query 它运行良好,但是当我也尝试查询列名时,它不起作用(可能是因为我有一个名为“FROM”的列,但这就是我使用“FROM”的原因!?)

这是我的代码:

connection = MySQLdb.connect(host='localhost',
    user='admin',
    passwd='',
    db='database1',
    use_unicode=True,
    charset="utf8")
cursor = connection.cursor()
query = """ select ACTUAL_TIME, 'FROM, ID
    union all
    select ACTUAL_TIME,  FROM , ID
    from TEST
        into outfile '/tmp/test.csv'
        fields terminated by ';'
        enclosed by '"'
        lines terminated by '\n';
        """

cursor.execute(query)
connection.commit()
cursor.close()

我收到此错误消息:

raise errorvalue
_mysql_exceptions.OperationalError: (1054, "Unknown column 'ACTUAL_TIME' in 'field list'")

编辑:显示创建表测试;

| TEST | CREATE TABLE `TEST` (
  `ACTUAL_TIME` varchar(100) DEFAULT NULL,
  `FROM` varchar(100) DEFAULT NULL,
  `STATUS` varchar(100) DEFAULT NULL,
  `ID` int(10) NOT NULL AUTO_INCREMENT,
  PRIMARY KEY (`ID`)
) ENGINE=InnoDB AUTO_INCREMENT=76287 DEFAULT CHARSET=utf8 |

【问题讨论】:

  • select语句中的列名周围使用backtick`然后执行
  • 错误消息暗示存在与您所询问的问题不同的问题。这个TEST 表是什么样的? SHOW CREATE TABLE TEST\G
  • 我用这个更新了我的代码!

标签: python mysql sql mysql-python


【解决方案1】:

试试这个:

connection = MySQLdb.connect(host='localhost',
    user='admin',
    passwd='',
    db='database1',
    use_unicode=True,
    charset="utf8")
cursor = connection.cursor()
query = """ select 'ACTUAL_TIME', 'FROM', 'ID' -- add single quotes
    union all
    select `ACTUAL_TIME`, `FROM`, `ID`  -- add here backtick in column names
    from TEST
        into outfile '/tmp/test.csv'
        fields terminated by ';'
        enclosed by '"'
        lines terminated by '\n';
        """

cursor.execute(query)
connection.commit()
cursor.close()

否则您可以使用它来获取列名“SHOW columns”

或:

cursor.execute("SELECT * FROM table_name LIMIT 0")
print cursor.description

【讨论】:

  • 您使用的是 ' " ',附在您是否也尝试过?再次检查列值名称以防区分大小写。
  • 我试过你的代码,但错误信息是一样的。我检查了列名,确定它是正确的。
  • 在我的 cursor.execute(query) 部分之后?
  • print [columns[0] for column in cursor.fetchall()] NameError: name 'columns' is not defined
  • @Rebecca21 我的意思是query = """ select 'ACTUAL_TIME', 'FROM', 'ID' union all select `ACTUAL_TIME`, `FROM`, `ID` ...
【解决方案2】:

columns = cursor.description

result = [{columns[index][0]:column for index, column in enumerate(value)} for value in cursor.fetchall()]

打印(结果)

【讨论】:

  • 您介意为不太有经验的人添加一些解释吗?
猜你喜欢
  • 2014-08-20
  • 2017-01-07
  • 2012-04-21
  • 2013-04-21
  • 2017-09-13
  • 1970-01-01
  • 1970-01-01
  • 2020-12-06
  • 2012-10-03
相关资源
最近更新 更多