繁体   English   中英

使用python在SQLite3中进行查询

[英]A query in SQLite3 with python

我正在测试使用python和sqlite3的查询。 第一种方法可以正常工作,但是第二种方法不起作用。 它涉及包含DB中的重新生成变量的已定义变量类型:

import sqlite3

def insertar():

    db1=sqlite3.connect('tabla.db')
    print("Estas en la funcion insertar")

    nombre1=raw_input("Escribe el titulo de la novela: ")
    autor1=raw_input("Escribe el autor de la novela: ")
    year1=str(input("Digita el any de la novela: "))

    consulta=db1.cursor()

    strConsulta = "insert into tabla(nombre, autor, year) values\
    ('"+nombre1+"','"+autor1+"','"+year1+"')"
    print(strConsulta)

    consulta.execute(strConsulta)
    consulta.close()
    db1.commit()
    db1.close()

def consultar():
    db2 = sqlite3.connect("tabla.db")
    print("Estas en la funcion insertar")
    db2row_factory = sqlite3.Row
    consulta = db2.cursor()
    consulta.execute("select * from tabla")
    filas = consulta.fetchall()
    lista = []
    for fila in filas:
        s = {}
        s['nombre'] = fila['nombre']
        s['autor'] = fila['autor']
        s['year'] = str(fila['year'])
        lista.append(s)

    consulta.close()
    db2.close()
    return(lista)


#consultar()

def menu():
    Opcion= input("\nIngresa la opcion deseada\n1.Inserta un valor en la tabla\n2.Consultar los valores de la tabla\n")
    if Opcion==1:
        insertar()
        menu()
    elif Opcion==2:
        ListaNovelas = consultar()
        for novela in ListaNovelas:
            print(novela['nombre'],novela['autor'],novela['year'])
        menu()

menu()

我在测试第二个方法consultar()时遇到此错误。

$ python file.py

Ingresa la opcion deseada
1.Inserta un valor en la tabla
2.Consultar los valores de la tabla
2
Estas en la funcion insertar
Traceback (most recent call last):
  File "insertar.py", line 56, in <module>
    menu()
  File "insertar.py", line 51, in menu
    ListaNovelas = consultar()
  File "insertar.py", line 33, in consultar
    s['nombre'] = fila['nombre']
TypeError: tuple indices must be integers, not str

db2row_factory = sqlite3.Row

这是有问题的路线。 相反,您打算在db2连接实例上设置row_factory工厂:

db2.row_factory = sqlite3.Row

然后,所有提取的行现在都将是sqlite3.Row实例,可以像字典一样访问字段值。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM