2017-02-08 8 views
0

Я пытаюсь сделать окончательный проект «турнира» во введении в курс реляционных баз данных по udacity. Вот ссылка на описание проекта:psycopg2.ProgrammingError: отношения «matches» не существует

https://docs.google.com/document/d/16IgOm4XprTaKxAa8w02y028oBECOoB1EI1ReddADEeY/pub?embedded=true

У меня есть файл под названием tournament.sql, в котором база данных «турнир» и «матчи» две таблицы и «игроков» определены:

DROP DATABASE IF EXISTS tournament; 

CREATE DATABASE tournament; 

CREATE TABLE IF NOT EXISTS matches (

id SERIAL PRIMARY KEY, 
player1 integer references players (id), 
player2 integer references players (id) 
); 

CREATE TABLE IF NOT EXISTS players (

id SERIAL PRIMARY KEY, 
name varchar(40) 
); 

I также определенные органы двух функций deleteMatches и deletePlayers в tournament.py файле:

import psycopg2 

def connect(): 
"""Connect to the PostgreSQL database. Returns a database connection.""" 
return psycopg2.connect("dbname=tournament") 

def deleteMatches(): 
"""Remove all the match records from the database.""" 
conn = connect() 
c = conn.cursor() 
c.execute("TRUNCATE TABLE matches;") 
conn.commit() 
conn.close() 

def deletePlayers(): 
"""Remove all the player records from the database.""" 
conn = connect() 
c = conn.cursor() 
c.execute("TRUNCATE TABLE players;") 
conn.commit() 
conn.close() 

Там еще один питон файл предопределены/предварительно созданный автором всего курса «tournament_test.py», который может быть выполнен, чтобы проверить, работают ли все необходимые функции в турнире.py работают/выполняют свою работу. Этот файл «tournament_test.py» выполняется в виртуальной машине из командной строки, так и в моем случае производит следующие ошибки:

[email protected]:/vagrant/tournament$ python tournament_test.py 
Traceback (most recent call last): 
File "tournament_test.py", line 151, in 
testCount() 
File "tournament_test.py", line 17, in testCount 
deleteMatches() 
File "/vagrant/tournament/tournament.py", line 16, in deleteMatches 
c.execute("TRUNCATE TABLE matches;") 
psycopg2.ProgrammingError: relation "matches" does not exist 

Кто-нибудь знает, что случилось с моим кодом? Я начинаю терять терпение. Я потратил несколько часов, пытаясь понять, что случилось, и я могу найти любую информацию, которая была бы полезной. Этот курс настолько плох, неряшлив и непрофессионален. Я просто не могу найти правильные слова, чтобы выразить свое разочарование.

+0

Загрузил ли этот файл SQL в базу данных? Как? –

+0

Я не понимаю вопроса. Что означает загрузить файл SQL в базу данных? Какую базу данных вы имеете в виду? Как мне загружать sql-файлы в базы данных? Вы имеете в виду это: «из турнирного импорта *», который является верхней частью предопределенного файла python: турнир_test.py? –

+0

Хорошо, что вы ожидаете от файла самостоятельно Что делать? Все это очень хорошо написало файл команд SQL, но если вы фактически не отдаете их в базу данных, вы могли бы также написать детские рифмы. Ваша ошибка говорит вам, что вы не создали таблицу, что верно, если вы никогда не запускали этот файл. –

ответ

1

«Возможно, вы уже решили это самостоятельно, как и я, но если вы все еще ищете или кого-то еще, кто может столкнуться с этой проблемой, я также беру этот курс и наткнулся на эту проблему начинающего.

Это был ошибкой пользователя. Я соединялся к бродячему и базам данных турнира в неправильном направлении.

После входа в бродягу я был в правой папке доступа правильной базы данных, но в неправильном методе.

ошибки :

Однажды в бродяжнике я пошел в psql как пользователь бродяга и импортировал файл.

\i tournament.sql 

Затем я подключился к базе данных.

\c tournament 

Затем я вышел из psql, чтобы запустить файл, и получение отношения не существует.

Мне нужно было сделать еще один шаг.

FIX:

После подключения и входа в турнир базы данных. Мне нужно было снова импортировать файл турнир.sql.

Это создало отношения внутри реальной базы данных, а не только бродячие или где бы я их не создавал.

так от Vagrant после команды Бродячей SSH # запустить эти команды отдельно кд/бродяга/турнир/

psql 

\i tournament.sql 

\c tournament 

\i tournament 

#last check to verify your relations were created 
\dt 
\d (table or view) 

Это то, что сделал это для меня.Остальная часть проекта была легкой. Надеюсь, это поможет любому, кто ищет ответ здесь ». My q&a