我正在尝试获取数据帧并将其导入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中使用sqlalchemy库,我试图将我的数据帧推送到数据库:
#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)
此代码成功返回我的数据框中的数据,但我仍然无法在我的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中没有数据显示。
我做错了什么?!
答案 0 :(得分:0)
如果您可以在会话期间显示数据但不能从pgAdmin(不同的会话)显示数据,则可以确定您的错误是错误的提交。 我不是sqlalchemy的专家,但我认为你必须阅读如何管理会话以及如何提交它。 这是一个很好的链接:
http://docs.sqlalchemy.org/en/latest/orm/session_basics.html
您必须创建会话对象并执行提交命令:
session.commit()