Python'daki SQLite veritabanımı, sonucu bir Pandas DataFrame olarak döndürme umuduyla sorgulamaya çalışıyorum. Ancak, sorguda çok fazla kayıt ile hatalı bir çıkışa neden olan bir şeyler yanlış gidiyor. Bu sorgu metni kullanmak Örneğin,:NATURAL JOIN ile sqlite sorgusu fazladan kayıtlar üretir
query = "SELECT name, season, opponent, ratingA, ratingB
FROM players NATURAL JOIN games NATURAL JOIN A_ratings NATURAL JOIN B_ratings
WHERE (season="2015-16") AND (home_away="home") AND (tournament="tournX") AND (name="John Doe")"
doğru sonuç iki satır, bu koşullar ile bu oyuncu tarafından her görünüm için biri olmalıdır. Eğer bir imleç doğru sonucu yazdırmak olsaydı, bu şekilde görünecektir:
(u'John Doe', u'2015-16', u'TeamAlpha', 7.5, 8.0)
(u'John Doe', u'2015-16', u'TeamBeta', 6.0, 6.0)
yerine , ben adıyla koşullarla eşleşen oyunlar için takımdaki her oyuncu için derecelendirme olsun böyle name
sütununda doğru adı yerine sorgudan:
(u'John Doe', u'2015-16', u'TeamAlpha', 7.5, 8.0)
(u'John Doe', u'2015-16', u'TeamAlpha', 8.5, 9.0)
(u'John Doe', u'2015-16', u'TeamAlpha', 6.5, 7.0)
(u'John Doe', u'2015-16', u'TeamAlpha', 6.5, 6.0)
(u'John Doe', u'2015-16', u'TeamAlpha', 7.0, 7.0))
(u'John Doe', u'2015-16', u'TeamBeta', 6.0, 6.0)
(u'John Doe', u'2015-16', u'TeamBeta', 8.0, 7.5)
(u'John Doe', u'2015-16', u'TeamBeta', 7.0, 7.0)
(u'John Doe', u'2015-16', u'TeamBeta', 7.5, 8.0)
(u'John Doe', u'2015-16', u'TeamBeta', 6.5, 7.0)
Bu tablolar arasında oluyor çarpma çeşit var gibi görünüyor ve ben sorun DOĞAL içindedir bölümünü JOIN düşünüyorum ama Nasıl tamir edeceğimi bilemiyorum.
Açıkçası bir SQL acemi oldum ama SQLite için DB Browser'ma girdiğimde sorgu mükemmel bir şekilde çalıştığı için çok şaşırdım. İşte
CREATE TABLE "games" (
`gameID` INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT UNIQUE,
`season` TEXT,
`tournament` TEXT,
`home_away` TEXT,
`opponent` TEXT, )
CREATE TABLE "players" (
`playerID` INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT UNIQUE,
`name` TEXT UNIQUE)
CREATE TABLE "A_ratings" (
`A_ratingID` INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT UNIQUE,
`playerID` INTEGER,
`gameID` INTEGER,
`ratingA` REAL,
FOREIGN KEY(`playerID`) REFERENCES `players`(`playerID`),
FOREIGN KEY(`gameID`) REFERENCES games(gameID))
CREATE TABLE "B_ratings" (
`B_ratingID` INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT UNIQUE,
`playerID` INTEGER,
`gameID` INTEGER,
`ratingB` REAL,
FOREIGN KEY(`playerID`) REFERENCES `players`(`playerID`),
FOREIGN KEY(`gameID`) REFERENCES games(gameID))
ilgili panda parçası olmakla birlikte, (yukarıdaki gibi) Ben sadece imleç sonuçlarını yazdırırken sorun bile olmuyor: tablolar böyle yapılandırılmıştır.
cnxn = sqlite3.connect(path)
df = pd.read_sql(query, cnxn)
Katkılar KULLANIM kullanarak yazmak daha kolay olurdu. –
Bir ton teşekkürler. Katılanların düzeninin önemi hakkında hiçbir fikrim yoktu; Bence bu yüzden benim denediğim çözümlerim başarısız oldu. – jdep