首页 > 解决方案 > Psycopg2 无法创建表

问题描述

在 Jupiter notebook 中,我能够使用 Psycopg2 创建数据库。但不知何故,我无法在其中创建 Table 并存储元素。

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);

使用上面的代码,我可以从 psql(windows 命令提示符)中看到名为“socialmedia”的数据库。

但是使用下面的代码,我无法从 psql 中看到名为“test_table”的表。

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 notebook 获取元素,但不能从 psql 获取元素。似乎元素是临时存储的。

如何从 psql 查看表和元素并永久保留元素?

标签: pythondatabasepostgresqljupyter-notebookpsycopg2

解决方案


dbCursor.execute('commit')我在您问题的第二部分中没有看到任何内容?

您提供了一个使用 AUTOCOMMIT 的示例,该示例有效,并且您在问为什么results are stored temporarly不使用 AUTOCOMMIT 时?好吧,他们没有承诺!

它们仅针对当前会话存储,这就是您可以从 Jupyter 会话中获取它的原因

还:

  • 你不需要在你的 python 代码中添加分号
  • 你不需要在你的 SQL 代码中加上分号(除非你执行多个语句,这里不是这种情况)

推荐阅读