0

我希望有人能帮助我吗?我正在尝试使用 Python 2.7 和 MySQLdb 库填充 MySQL 数据库。我已经编写了下面的示例脚本,但无论我尝试什么,我都无法让它工作。

代码运行时没有错误(当我运行代码时它会打印“完成”但仅此而已),当我直接在 phpMyAdmin 中尝试查询时它工作正常,由于某种原因我无法让它在 Python 中工作。

我错过了什么吗?我需要在 phpMyAdmin 中激活什么才能让它工作吗?下午大部分时间我一直在寻找答案,当其他人遇到类似问题时,尽管他们往往会收到错误消息(我没有)。

import MySQLdb

# Define the database access details
DB_HOST = "localhost"
DB_USER = "username"
DB_PASSWORD = "secretpassword"
DB_NAME = "TestDatabase"

# Establish the connection to the database
db = MySQLdb.connect(
                     host=DB_HOST,
                     user=DB_USER,
                     passwd=DB_PASSWORD,
                     db=DB_NAME
                     )
cur = db.cursor()

Query = "INSERT INTO SearchResults ( `TimeStamp`, `SearchTerm`, `SearchResult`) VALUES ('2013-06-22 17:28:09', 'TestSearchTerm', 'Test Search Result');"
cur.execute(Query)

print"Done"

这是我第一次遇到这种情况,所以如果我忽略了一些明显的事情,请原谅我!任何帮助,将不胜感激!

4

1 回答 1

2

您可能必须进行commit()更改。


由于这是您的“第一次体验”,因此有一些解释:

根据您的“数据库引擎”的功能,当您修改数据时,您的更改不会立即对“外部世界”可见。松散地说,您的更改对于您的数据库连接是“私有的”。

这是一个非常重要的特性。除其他外,这样做的好处是允许您进行多项修改 - 并一次“发布”它们。另一个好处是,如果在某些时候您决定修改无效,您可以“取消”它们而不会干扰数据库的任何其他用户。

这样做的一个小缺点是,一旦您准备好发布更改,就必须明确提交更改。否则,一旦连接关闭,它们就会消失。您还必须有机会设置“自动提交”——即在每个对数据库的请求之后都会有一个隐式提交。根据您的需要,这可能是一种选择。总结一下:

  • 将您的更改“发布”到数据库:使用db.commit(),
  • “取消”您对数据库的更改:使用db.rollback()或关闭连接而不提交,
  • 在每个请求后隐式提交:db.autocommit(True)

DBA 和其他数据库专家可能会因为上述段落过于简单而对我大喊大叫。但我希望这能帮助你理解发生了什么!

于 2013-06-22T17:23:09.333 回答