【问题标题】:Python and sqlite troublePython和sqlite的麻烦
【发布时间】:2011-01-05 23:33:45
【问题描述】:

我无法在 python 中显示来自数据库 sqlite 的数据。

connection = sqlite3.connect('db')
connection.cursor().execute('CREATE TABLE IF NOT EXISTS users (     \
                        id TEXT,                                    \
                        name TEXT,                                  \
                        avatar TEXT                                 \
                )')

# In cycle:
query = 'INSERT INTO users VALUES ("' + str(friend.id) + '", "' + friend.name + '", "' + friend.avatar +'" )'
print query
connection.cursor().execute(query)
connection.commit()

# After cycle
print connection.cursor().fetchall()

查询变量的示例输出:

INSERT INTO users VALUES ("111", "Some Name", "http://avatar/path" )

结果,fetchall 返回空元组。为什么?


UPD 忘记代码:

connection.cursor().execute('SELECT * FROM users')
connection.cursor().fetchall()

→ []

【问题讨论】:

    标签: python database sqlite


    【解决方案1】:

    INSERT 不返回数据。要取回数据,您必须发出 SELECT 语句。

    【讨论】:

      【解决方案2】:
      import sqlite3
      
      con = sqlite3.connect("db")
      
      con.execute("create table users(id, name, avatar)")
      
      con.execute("insert into users(id, name, avatar) values (?, ?, ?)", (friend.id, friend.name, friend.avatar))
      con.commit()
      
      for row in con.execute("select * from users")
          print row
      
      con.close()
      

      【讨论】:

        【解决方案3】:

        因为显示的 create table 字符串在语法上是无效的 Python,insert into 字符串也是如此。

        【讨论】:

        • 我认为他指的是引号,尽管我猜测您的代码中并没有真正存在不匹配,因为您没有收到 Python 语法错误,并且由于 INSERT 语句打印正常.
        • @larry-lustig @msw 哦,对不起,那是我的错。有传递常量字符串,用简单字符串替换后我忘了去掉引号。
        【解决方案4】:

        其实你第一个问题的答案是:因为你使用了不同的游标。

        connection.cursor() 在您之前创建的连接中创建一个新游标。 fetchall() 为您提供之前在同一个游标中执行的查询的结果。 IE。你所做的是这样的:

        # After cycle
        cursor1 = connection.cursor()
        cursor1.execute('SELECT * FROM users')
        cursor2 = connection.cursor()
        cursor2.execute("")
        cursor2.fetchall()
        

        你应该做的是:

        # After cycle
        cursor = connection.cursor()
        cursor.execute('SELECT * FROM users')
        print cursor.fetchall()
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2017-09-03
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多