【发布时间】:2015-11-23 00:21:18
【问题描述】:
我用 Python 编写了以下代码,连接到 DB,创建两个表并将它们连接起来。然后它打印JOIN 查询的结果。
问题是行数是 3,虽然我希望得到 2 行。另外,如果我在命令提示符下使用sqlite> 运行相同的查询,那么JOIN 返回的行数是正确的,即2。
import sqlite3 as lite
import pandas as pd
# Connecting to the database. The `connect()` method returns a connection object.
con = lite.connect('getting_started.db')
with con:
cur = con.cursor()
cur.execute("DROP TABLE IF EXISTS cities")
cur.execute("DROP TABLE IF EXISTS weather")
cur.execute("CREATE TABLE cities (name text, state text)")
cur.execute("CREATE TABLE weather (city text, year integer, warm_month text, cold_month text, average_high integer)")
# Filling 'cities' with the data
cur.execute("INSERT INTO cities VALUES('Washington', 'DC')")
cur.execute("INSERT INTO cities VALUES('Houston', 'TX')")
# Filling 'weather' with the data
cur.execute("INSERT INTO weather VALUES('Washington', 2013, 'July', 'January', 59)")
cur.execute("INSERT INTO weather VALUES('Houston', 2013, 'July', 'January', 62)")
# Joining data together
sql = "SELECT name, state, year, warm_month, cold_month FROM cities " \
"INNER JOIN weather " \
"ON name = city"
cur.execute(sql)
rows = cur.fetchall()
cols = [desc[0] for desc in cur.description]
# Loading data into pandas
df = pd.DataFrame(rows, columns=cols)
for index, row in df.iterrows():
print("City: {0}, The warmest month: {1}".format(row['name'],row['warm_month']))
在 Python 中,结果是:
City: Washington, The warmest month: July
City: Washington, The warmest month: July
City: Houston, The warmest month: July
但是,在命令提示符下结果不同(正确):
City: Washington, The warmest month: July
City: Houston, The warmest month: July
【问题讨论】:
-
你能告诉我们它返回的 3 行吗?例如。
print(rows) -
@Tom Dalton:我更新了帖子,请检查一下。
-
我注意到的一件事是
rows = cur....行在with con:上下文管理器之外。我认为这不会产生影响,但无论如何可能值得修复。 -
另外,你真的可以
print(rows),以及你的原始输出吗?我正在尝试查看错误是否在熊猫的东西中。 -
@Tom Dalton:将 rows=cur... 放入 with 解决了问题。谢谢!