繁体   English   中英

Psycopg2 无法创建表

[英]Psycopg2 can not create table

从 Jupiter notebook 中,我能够使用 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);

使用上面的代码,我可以从 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 中查看表和元素并永久保留元素?

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

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

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

还:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM