postgresql 使用python代码后无法在pgAdmin中查看数据

f0brbegy  于 2023-01-30  发布在  PostgreSQL
关注(0)|答案(2)|浏览(233)

我正在尝试获取一个 Dataframe 并将其导入postgresql数据库。我以前做过这样的操作,总是可以使用pgAdmin查看数据库中的数据。但是,这一次,在pgAdmin中看不到数据。
下面是我用来在postgresql数据库中创建表的SQL代码:

CREATE TABLE Twitterapp
(
    tweetid character varying(255),
    tweettext character varying(255),
    tweetretweetct integer,
    tweetfavoritect integer,
    tweetsource character varying(255),
    tweetcreated character varying(255),
    userid character varying(255),
    userscreen character varying(255),
    username character varying(255),
    usercreatedt character varying(255),
    user_desc character varying(255),
    userfollowerct integer,
    userfriendsct integer,
    userlocation character varying(255),
    usertimezone character varying(255)

)
WITH (
  OIDS=FALSE
);

然后,使用Python中的SQLAchemy库,我试图将我的 Dataframe 推入数据库:

#First attempt to load data 
engine =create_engine('postgresql://username:password@link:5432/db_name')
conn = engine.connect()    
a.to_sql('public.twitterapp', con=conn, if_exists='replace', 
index=False)

由于操作成功,我尝试从数据库中读取一个表以检查它是否工作:

##call data from database
result_set = engine.execute("SELECT * FROM twitterapp")  
for r in result_set:  
    print(r)

这段代码成功地返回了dataframe中的数据,但在pgAdmin数据库中仍然看不到它,所以我尝试了第二种方法:

b = a.values.tolist()
sql2 = """INSERT INTO twitterapp VALUES(%s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s);"""
conn = psycopg2.connect("dbname='db_name' user='username' host='link' password='password'")
c = conn.cursor()
for row in b:
    c.execute(sql2, row)
    print(row)
conn.commit()

同样,它成功执行(即没有抛出错误),但pgAdmin中没有显示任何数据。
我做错什么了?!

eyh26e7m

eyh26e7m1#

如果你可以在会话中显示数据,但不能从pgAdmin(另一个会话)中显示,那么可以肯定你的错误是错误提交。我不是sqlalchemyMaven,但我认为你必须阅读如何管理会话以及如何提交它。这是一个很好的链接:
http://docs.sqlalchemy.org/en/latest/orm/session_basics.html
您必须创建一个会话对象并执行commit命令:

session.commit()
4ioopgfo

4ioopgfo2#

您应该检查psql中的端口是否正确。在我的例子中,本地postgresql正在监听端口5433

相关问题