[英]How to write a pandas dataframe as a table into a MySQL database?
只是一個快速提問的人:我在mysql(意見)中創建了一個darabase:
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| opinions |
| performance_schema |
| sys |
+--------------------+
5 rows in set (0.06 sec)
我還有一個pandas數據幀df
:
import pandas as pd
df = pd.read_csv('file.csv', sep='|', names=['id', 'opinions'])
df.head(3)
日期:
id content
0 id1 'blablababla
1 id2 'blalbabla
...
n idn 'blalbabl
然后,我想將df
作為表( items
)加載到opinions
數據庫中。 這是我試過的:
import mysql.connector
from sqlalchemy import create_engine
engine = create_engine('mysql+mysqlconnector://user:password@localhost:3306/opinions', echo=False)
df.to_sql(name='items', con=engine, if_exists = 'replace', index=False)
df
但是,我得到了這個例外:
OperationalError: (mysql.connector.errors.OperationalError) 2055: Lost connection to MySQL server at 'localhost:3306', system error: 32 Broken pipe
我應該如何將表格df
加載或寫入opinions
數據庫?
在MySQL服務器上, opinions
不是table
,而是database
(如show databases
所示),它基本上是表的集合。 但是,您只能在表上發出select語句。
您可以通過SHOW TABLES IN opinions
查看哪些表格存在。 將數據庫添加為連接的參數也很方便:
config = {
'user' : 'root',
'passwd' : 'password',
'host' : 'localhost',
'raise_on_warnings' : True,
'use_pure' : False,
'database' : 'opinions'
}
con = mysql.connector.connect(**config)
這導致所有表引用都針對opinions
數據庫中的表。 然后, 現有表上的普通選擇應該起作用:
data = pd.read_sql('SELECT * FROM <some_table_name>', con)
使用Pandas從MySQL讀取。 MySQLdb寫入數據庫。
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| opinions |
| performance_schema |
| sys |
+--------------------+
大! 以您的示例為例,將test
替換為opinions
mysql> use test;
Reading table information for completion of table and column names
Database changed
mysql> show tables;
+-----------------+
| Tables_in_test |
+-----------------+
| _t |
| food |
| food_in |
| food_min |
| type |
| user |
+-----------------+
4 rows in set (0.00 sec)
mysql> select * from test.food;
+----+-------+--------------+--------+----------+
| ID | Cat | Item | price | quantity |
+----+-------+--------------+--------+----------+
| 1 | Food | Pizza | 2.7500 | 300 |
| 2 | Liq | Beer | 2.5000 | 300 |
| 4 | Food | Sandwich | 4.0000 | 222 |
| 12 | Food | Soup | 3.5000 | 100 |
+----+-------+--------------+--------+----------+
4 rows in set (0.00 sec)
所以:
data = pd.read_sql('SELECT * FROM opinions', con)
變成:
data = pd.read_sql('SELECT * FROM opinions.MYTABLETHATIWANT', con)
我使用MySQLdb寫入數據庫。 所以,我可以使用基本的python和pandas。 您可能還有禁止數據庫/表訪問的權限問題。 您使用的是root用戶還是其他用戶並且已為用戶設置了權限。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.