【问题标题】:basically i am trying to do a python-sql connector program but at the moment i'm stuck with this error基本上我正在尝试做一个 python-sql 连接器程序,但目前我遇到了这个错误
【发布时间】:2020-03-15 12:01:48
【问题描述】:

我得到了错误-->

Traceback (most recent call last):
  File "C:\Users\REJI\Desktop\project\the project\book_store.py", line 346, in <module>
    sale()
  File "C:\Users\REJI\Desktop\project\the project\book_store.py", line 321, in sale
    read_sale()
  File "C:\Users\REJI\Desktop\project\the project\book_store.py", line 217, in read_sale
    print(body%(str(row[0]),row[4][0:20],str(row[2])[0:15],str(row[1]),str(row[3])))
TypeError: 'NoneType' object is not subscriptable

对于这个 python -->

def read_sale():
    qs='''select s1.*,book_title from sale s1, bookmaster b1
where s1.book_no=b1.book_no order by s1.book_no'''
    cur.execute(qs)
    data=cur.fetchall()
    head='''\
               All Sales
+-------+--------------------+------------+----------+----------+
|Book No|       Title        |Date of sale| Quantity |   Price  |
+-------+--------------------+------------+----------+----------+'''
    body='''\
|%7s|%20s|%12s|%10s|%10s|
+-------+--------------------+------------+----------+----------+'''
    print(head)
    for row in data:
        print(body%(str(row[0]),str(row[4])[0:20],str(row[2])[0:15],str(row[1]),str(row[3])))

用于将值输入到此 mysql 表中存在的列中-->

| Field    | Type        | Null | Key | Default | Extra |
+----------+-------------+------+-----+---------+-------+
| book_no  | int(30)     | YES  |     | NULL    |       |
| quantity | varchar(15) | YES  |     | NULL    |       |
| sdate    | date        | YES  |     | NULL    |       |
| price    | int(40)     | YES  |     | NULL    |       |
| title    | varchar(20) | YES  |     | NULL    |       |
+----------+-------------+------+-----+---------+-------+

如果我将一些代码更改为 str,我会得到下面的结果,我不希望列标题和数量的信息不显示,我希望它们显示 mysql 表中存在的某个值。

Enter your choice 1-51
               All Sales
    +-------+--------------------+------------+----------+----------+
    |Book No|       Title        |Date of sale| Quantity |   Price  |
    +-------+--------------------+------------+----------+----------+
    |    147|          **None**  |  2019-11-20|  **None**|        50|
    +-------+--------------------+------------+----------+----------+
    sale Menu`enter code here`
            -----------------
            1.To read_sale
            2.To add_sale
            3.TO Exit and return to main menu 

所以,如果你能帮助我, 对你的帮助表示感谢 谢谢

【问题讨论】:

  • 错误信息中的行与脚本不一样。错误消息在row[4] 周围没有str()。看起来您发布了生成没有错误的输出的脚本版本。
  • 问题是书有title = NULL,销售有quantity = NULL
  • 根据 TypeError,看起来 row[4](标题)的值为 None。 stackoverflow.com/a/9320883/5249058 。这可能是由于您的 sql 连接。为什么不先打印每一行来进行调试。

标签: python mysql mysql-python mysql-connector-python


【解决方案1】:

显然你的一些书有title = NULL,而一些销售有quantity = NULL。您需要在尝试对其进行格式化之前检查这些内容。

for row in data:
    if row[4] is None:
        row[4] = 'Untitled'
    if row[2] is None:
        row[2] = 0
    print(body%(str(row[0]),row[4][0:20],str(row[2])[0:15],str(row[1]),str(row[3])))

顺便说一句,由于您使用的是字符串格式,您可以简单地在数字数据的格式字符串中使用%d,而不是在参数列表中调用str()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-08-03
    • 2021-05-18
    • 2020-12-12
    • 2020-06-16
    • 2022-01-09
    • 2021-09-15
    • 1970-01-01
    • 2019-10-04
    相关资源
    最近更新 更多