Psycopg2 не может создать таблицу - PullRequest
0 голосов
/ 25 марта 2020

Из записной книжки Юпитера я смог создать базу данных с помощью Psycopg2. Но каким-то образом мне не удалось создать таблицу и сохранить в ней элемент.

import psycopg2
from psycopg2.extensions import ISOLATION_LEVEL_AUTOCOMMIT

con = psycopg2.connect("user=postgres password='abc'");
con.set_isolation_level(ISOLATION_LEVEL_AUTOCOMMIT);

cursor          = con.cursor();
name_Database   = "socialmedia";

sqlCreateDatabase = "create database "+name_Database+";"

cursor.execute(sqlCreateDatabase);

С помощью приведенного выше кода я вижу базу данных с именем "socialmedia" из psql (windows командная строка).

Но с приведенным ниже кодом я не вижу таблицу с именем "test_table" из psql.

import psycopg2

# Open a DB session
dbSession = psycopg2.connect("dbname='socialmedia' user='postgres' password='abc'");
# Open a database cursor
dbCursor = dbSession.cursor();
# SQL statement to create a table
sqlCreateTable  = "CREATE TABLE test_table(id bigint, cityname varchar(128), latitude numeric, longitude numeric);";
# Execute CREATE TABLE command
dbCursor.execute(sqlCreateTable);
# Insert statements
sqlInsertRow1  = "INSERT INTO test_table values(1, 'New York City', 40.73, -73.93)";
sqlInsertRow2  = "INSERT INTO test_table values(2, 'San Francisco', 37.733, -122.446)";


# Insert statement
dbCursor.execute(sqlInsertRow1);
dbCursor.execute(sqlInsertRow2);

# Select statement
sqlSelect = "select * from test_table";
dbCursor.execute(sqlSelect);
rows = dbCursor.fetchall();

# Print rows
for row in rows:
    print(row);

Я могу получить элементы только из записной книжки Jupyter, но не из psql. И кажется, что элементы хранятся временно.

Как я могу увидеть таблицу и элементы из psql и сохранить элемент навсегда?

1 Ответ

1 голос
/ 25 марта 2020

Я не вижу dbCursor.execute('commit') во второй части вашего вопроса?

Вы предоставили пример с AUTOCOMMIT, который работает, и вы спрашиваете, почему results are stored temporarly, когда вы не используете AUTOCOMMIT? Ну, они не совершаются!

Они хранятся только для текущего сеанса, поэтому вы можете получить его из сеанса Jupyter

Также:

  • вам не нужно ставить точки с запятой в вашем python коде
  • вам не нужно ставить точки с запятой в своем коде SQL (кроме случаев, когда вы выполняете несколько операторов, что здесь не так)
...