từ SQLalchemy nhập tạo_Engine
Nhập PYMYSQL
nhập khẩu gấu trúc dưới dạng PD
uservitals = {"userid": ["xxxxx", "yyyyy", "zzzzz", "aaaaa", "bbbbb", "ccccc", "ddddd"],
& nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; "Người dùng"
& nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; "Hàng tháng
& nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; "HighStorderAmount": [30, 20, 16, 23, 20, 26, 9],
& nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; "LastorderAmount": [21,20,4,11,7,7,7],
& nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; "LastorderRating": [3,3,3,2,3,2,4],
& nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; "trung bình
& nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; "OrderMode": ["Web", "Ứng dụng", "Ứng dụng", "Ứng dụng", "Web", "Web", "Ứng dụng"],
& nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; "InmedicalCare": ["Không", "Không", "Không", "Không", "Có", "Không", "Không"]};
TableName & nbsp; & nbsp; = "Uservitals"
DataFrame & nbsp; & nbsp; = pd.dataFrame [data = uservitals] & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp;
sqlengine & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; = created_engine ['mysql+pymysql: // root:@127.0.0.1/test', pool_recycle = 3600]
dbconnection & nbsp; & nbsp; & nbsp; = sqlengine.connect []
try:
& nbsp; & nbsp; & nbsp; khung & nbsp; & nbsp; & nbsp; & nbsp; = dataFrame.to_sql [tablename, dbconnection, if_exist = 'fail'];
ngoại trừ valueError là vx:
& nbsp; & nbsp; & nbsp; in [VX]
ngoại trừ ngoại lệ là Ex: & nbsp; & nbsp; & nbsp;
& nbsp; & nbsp; & nbsp; in [ví dụ]
else:
& nbsp; & nbsp; & nbsp; in ["Bảng %s được tạo thành công." %tablename]; & nbsp; & nbsp; & nbsp;
finally:
& nbsp; & nbsp; & nbsp; dbconnection.close []
Andy Hayden đã đề cập đến chức năng chính xác [
feature1 feature2 class
0 0.548814 0.791725 1
1 0.715189 0.528895 0
2 0.602763 0.568045 0
3 0.544883 0.925597 0
4 0.423655 0.071036 0
5 0.645894 0.087129 0
6 0.437587 0.020218 0
7 0.891773 0.832620 1
8 0.963663 0.778157 0
9 0.383442 0.870012 0
0]. Trong câu trả lời này, tôi sẽ đưa ra một ví dụ hoàn chỉnh, mà tôi đã thử nghiệm với Python 3.5 nhưng cũng nên làm việc cho Python 2.7 [và Python 3.x]:Đầu tiên, hãy tạo DataFrame:
# Create dataframe
import pandas as pd
import numpy as np
np.random.seed[0]
number_of_samples = 10
frame = pd.DataFrame[{
'feature1': np.random.random[number_of_samples],
'feature2': np.random.random[number_of_samples],
'class': np.random.binomial[2, 0.1, size=number_of_samples],
},columns=['feature1','feature2','class']]
print[frame]
Mà mang lại:
feature1 feature2 class
0 0.548814 0.791725 1
1 0.715189 0.528895 0
2 0.602763 0.568045 0
3 0.544883 0.925597 0
4 0.423655 0.071036 0
5 0.645894 0.087129 0
6 0.437587 0.020218 0
7 0.891773 0.832620 1
8 0.963663 0.778157 0
9 0.383442 0.870012 0
Để nhập DataFrame này vào bảng MySQL:
# Import dataframe into MySQL
import sqlalchemy
database_username = 'ENTER USERNAME'
database_password = 'ENTER USERNAME PASSWORD'
database_ip = 'ENTER DATABASE IP'
database_name = 'ENTER DATABASE NAME'
database_connection = sqlalchemy.create_engine['mysql+mysqlconnector://{0}:{1}@{2}/{3}'.
format[database_username, database_password,
database_ip, database_name]]
frame.to_sql[con=database_connection, name='table_name_for_df', if_exists='replace']
Một mẹo là MySQLDB không hoạt động với Python 3.x. Vì vậy, thay vào đó chúng tôi sử dụng
feature1 feature2 class
0 0.548814 0.791725 1
1 0.715189 0.528895 0
2 0.602763 0.568045 0
3 0.544883 0.925597 0
4 0.423655 0.071036 0
5 0.645894 0.087129 0
6 0.437587 0.020218 0
7 0.891773 0.832620 1
8 0.963663 0.778157 0
9 0.383442 0.870012 0
1, có thể được cài đặt như sau:pip install mysql-connector==2.1.4 # version avoids Protobuf error
Output:
Lưu ý rằng
feature1 feature2 class
0 0.548814 0.791725 1
1 0.715189 0.528895 0
2 0.602763 0.568045 0
3 0.544883 0.925597 0
4 0.423655 0.071036 0
5 0.645894 0.087129 0
6 0.437587 0.020218 0
7 0.891773 0.832620 1
8 0.963663 0.778157 0
9 0.383442 0.870012 0
0 tạo bảng cũng như các cột nếu chúng chưa tồn tại trong cơ sở dữ liệu. Pandas hiện là một trong những thư viện Python phổ biến nhất được sử dụng để phân tích dữ liệu. Một khung dữ liệu trong gấu trúc là một cấu trúc dữ liệu để lưu trữ dữ liệu ở dạng bảng, tức là, theo hàng và cột. Bài viết này mô tả cách viết dữ liệu trong một bản dữ liệu gấu trúc vào bảng MySQL.
Hãy xem xét một khung dữ liệu với ba bản ghi như dưới đây.
Bạn có thể tạo một bảng cơ sở dữ liệu trong MySQL và chèn dữ liệu này bằng hàm to_sql [] trong gấu trúc. Hàm
feature1 feature2 class
0 0.548814 0.791725 1
1 0.715189 0.528895 0
2 0.602763 0.568045 0
3 0.544883 0.925597 0
4 0.423655 0.071036 0
5 0.645894 0.087129 0
6 0.437587 0.020218 0
7 0.891773 0.832620 1
8 0.963663 0.778157 0
9 0.383442 0.870012 0
3 yêu cầu hai tham số bắt buộc - tên bảng và đối tượng động cơ sqlalchemy.to_sql[] function in Pandas. The feature1 feature2 class
0 0.548814 0.791725 1
1 0.715189 0.528895 0
2 0.602763 0.568045 0
3 0.544883 0.925597 0
4 0.423655 0.071036 0
5 0.645894 0.087129 0
6 0.437587 0.020218 0
7 0.891773 0.832620 1
8 0.963663 0.778157 0
9 0.383442 0.870012 0
3 function requires two mandatory parameters - table name and an SQLAlchemy engine object.SQLalchemy là một bộ công cụ Python và Mapper quan hệ đối tượng [ORM] cho phép Python hoạt động với cơ sở dữ liệu SQL. Một động cơ là cơ sở của bất kỳ ứng dụng sqlalchemy nào nói chuyện với cơ sở dữ liệu. Đối tượng động cơ được tạo bằng cách gọi hàm create_engine [] với phương ngữ cơ sở dữ liệu và tham số kết nối. is a Python toolkit and Object Relational Mapper [ORM] that allows Python to work with SQL Databases. An engine is the base of any SQLAlchemy application that talks to the database. The engine object is created by calling the create_engine[] function with database dialect and connection parameters.
Chương trình Python sau đây tạo ra một bảng mới có tên
feature1 feature2 class
0 0.548814 0.791725 1
1 0.715189 0.528895 0
2 0.602763 0.568045 0
3 0.544883 0.925597 0
4 0.423655 0.071036 0
5 0.645894 0.087129 0
6 0.437587 0.020218 0
7 0.891773 0.832620 1
8 0.963663 0.778157 0
9 0.383442 0.870012 0
4 trong cơ sở dữ liệu MySQL và điền vào bảng với ba bản ghi từ DataFrame ví dụ của chúng tôi.import pandas as pd from sqlalchemy import create_engine # Credentials to database connection hostname="localhost" dbname="mydb_name" uname="my_user_name" pwd="my_password" # Create dataframe df = pd.DataFrame[data=[[111,'Thomas','35','United Kingdom'], [222,'Ben',42,'Australia'], [333,'Harry',28,'India']], columns=['id','name','age','country']] # Create SQLAlchemy engine to connect to MySQL Database engine = create_engine["mysql+pymysql://{user}:{pw}@{host}/{db}" .format[host=hostname, db=dbname, user=uname, pw=pwd]] # Convert dataframe to sql table df.to_sql['users', engine, index=False]
Sau khi thực hiện tập lệnh Python ở trên, hãy đăng nhập vào cơ sở dữ liệu MySQL của bạn và truy vấn bảng người dùng mới được tạo.
SELECT * from users;
111 | Thomas | 35 | Vương quốc Anh |
222 | Ben | 42 | Châu Úc |
333 | Harry | 28 | Ấn Độ |
Bây giờ chúng ta hãy xem xét một số tham số tùy chọn có thể được chuyển đến hàm
feature1 feature2 class
0 0.548814 0.791725 1
1 0.715189 0.528895 0
2 0.602763 0.568045 0
3 0.544883 0.925597 0
4 0.423655 0.071036 0
5 0.645894 0.087129 0
6 0.437587 0.020218 0
7 0.891773 0.832620 1
8 0.963663 0.778157 0
9 0.383442 0.870012 0
3.Chỉ mục: Đúng hoặc sai. Mặc định là đúng. : True or False. Default is True.
Nếu tham số chỉ mục trong hàm TO_SQL được đặt thành TRUE [index = true] hoặc nếu tham số chỉ mục bị bỏ qua thì chỉ mục của DataFrame được thêm làm cột đầu tiên trong bảng cơ sở dữ liệu MySQL. Nếu bạn không muốn chỉ mục thì hãy đặt
6feature1 feature2 class 0 0.548814 0.791725 1 1 0.715189 0.528895 0 2 0.602763 0.568045 0 3 0.544883 0.925597 0 4 0.423655 0.071036 0 5 0.645894 0.087129 0 6 0.437587 0.020218 0 7 0.891773 0.832620 1 8 0.963663 0.778157 0 9 0.383442 0.870012 0
Index_Label: Chuỗi. Mặc định là không có. : string. Default is None.
Khi index = true, chỉ mục của DataFrame được bao gồm trong bảng trong chỉ mục tên cột. Bạn có thể có một tên cột khác cho cột chỉ mục bằng cách đặt giá trị chuỗi thành tham số index_label. Ví dụ
df.to_sql['users', engine, index=True, index_label="RowNum"]
if_exists: thất bại, thay thế, nối. Mặc định là thất bại : fail, replace, append. Default is fail
Tham số này quyết định phải làm gì nếu bảng đã tồn tại trong cơ sở dữ liệu. Bởi Dafault, một lỗi được nêu ra nếu bảng tồn tại. Nếu bạn đặt tham số này thành
7 thì bảng hiện tại được bỏ trước khi chèn các giá trị. Nếu được đặt thànhfeature1 feature2 class 0 0.548814 0.791725 1 1 0.715189 0.528895 0 2 0.602763 0.568045 0 3 0.544883 0.925597 0 4 0.423655 0.071036 0 5 0.645894 0.087129 0 6 0.437587 0.020218 0 7 0.891773 0.832620 1 8 0.963663 0.778157 0 9 0.383442 0.870012 0
8 thì các giá trị trong DataFrame sẽ được thêm vào bảng hiện có.feature1 feature2 class 0 0.548814 0.791725 1 1 0.715189 0.528895 0 2 0.602763 0.568045 0 3 0.544883 0.925597 0 4 0.423655 0.071036 0 5 0.645894 0.087129 0 6 0.437587 0.020218 0 7 0.891773 0.832620 1 8 0.963663 0.778157 0 9 0.383442 0.870012 0
DTYPE: Từ điển : dictionary
Tham số
9 cho phép bạn chỉ định loại dữ liệu của các cột bảng là đối tượng từ điển. Các khóa trong từ điển là tên cột và giá trị có thể là một trong những loại dữ liệu SQLalchemy. Ví dụfeature1 feature2 class 0 0.548814 0.791725 1 1 0.715189 0.528895 0 2 0.602763 0.568045 0 3 0.544883 0.925597 0 4 0.423655 0.071036 0 5 0.645894 0.087129 0 6 0.437587 0.020218 0 7 0.891773 0.832620 1 8 0.963663 0.778157 0 9 0.383442 0.870012 0
from sqlalchemy.types import String, Integer df.to_sql['users', engine, dtype={"age": Integer[], "name": String[30]}]
Cuộc gọi chức năng
3 ở trên tạo bảngfeature1 feature2 class 0 0.548814 0.791725 1 1 0.715189 0.528895 0 2 0.602763 0.568045 0 3 0.544883 0.925597 0 4 0.423655 0.071036 0 5 0.645894 0.087129 0 6 0.437587 0.020218 0 7 0.891773 0.832620 1 8 0.963663 0.778157 0 9 0.383442 0.870012 0
4 với cộtfeature1 feature2 class 0 0.548814 0.791725 1 1 0.715189 0.528895 0 2 0.602763 0.568045 0 3 0.544883 0.925597 0 4 0.423655 0.071036 0 5 0.645894 0.087129 0 6 0.437587 0.020218 0 7 0.891773 0.832620 1 8 0.963663 0.778157 0 9 0.383442 0.870012 0
2 được đặt là loại# Import dataframe into MySQL import sqlalchemy database_username = 'ENTER USERNAME' database_password = 'ENTER USERNAME PASSWORD' database_ip = 'ENTER DATABASE IP' database_name = 'ENTER DATABASE NAME' database_connection = sqlalchemy.create_engine['mysql+mysqlconnector://{0}:{1}@{2}/{3}'. format[database_username, database_password, database_ip, database_name]] frame.to_sql[con=database_connection, name='table_name_for_df', if_exists='replace']
3 và# Import dataframe into MySQL import sqlalchemy database_username = 'ENTER USERNAME' database_password = 'ENTER USERNAME PASSWORD' database_ip = 'ENTER DATABASE IP' database_name = 'ENTER DATABASE NAME' database_connection = sqlalchemy.create_engine['mysql+mysqlconnector://{0}:{1}@{2}/{3}'. format[database_username, database_password, database_ip, database_name]] frame.to_sql[con=database_connection, name='table_name_for_df', if_exists='replace']
4 là# Import dataframe into MySQL import sqlalchemy database_username = 'ENTER USERNAME' database_password = 'ENTER USERNAME PASSWORD' database_ip = 'ENTER DATABASE IP' database_name = 'ENTER DATABASE NAME' database_connection = sqlalchemy.create_engine['mysql+mysqlconnector://{0}:{1}@{2}/{3}'. format[database_username, database_password, database_ip, database_name]] frame.to_sql[con=database_connection, name='table_name_for_df', if_exists='replace']
5# Import dataframe into MySQL import sqlalchemy database_username = 'ENTER USERNAME' database_password = 'ENTER USERNAME PASSWORD' database_ip = 'ENTER DATABASE IP' database_name = 'ENTER DATABASE NAME' database_connection = sqlalchemy.create_engine['mysql+mysqlconnector://{0}:{1}@{2}/{3}'. format[database_username, database_password, database_ip, database_name]] frame.to_sql[con=database_connection, name='table_name_for_df', if_exists='replace']
Các cột trong bảng người dùng
index bigint[20] id bigint[20] name varchar[30] age int[11] country text
Thêm khóa chính
Hàm to_sql [] không cung cấp bất kỳ tùy chọn nào để tạo cột khóa chính. Tuy nhiên, bạn có thể đạt được điều này bằng cách gọi phương pháp .Execute của động cơ SQLalchemy..execute method of SQLAlchemy engine.
Câu lệnh sau đây đặt cột
# Import dataframe into MySQL
import sqlalchemy
database_username = 'ENTER USERNAME'
database_password = 'ENTER USERNAME PASSWORD'
database_ip = 'ENTER DATABASE IP'
database_name = 'ENTER DATABASE NAME'
database_connection = sqlalchemy.create_engine['mysql+mysqlconnector://{0}:{1}@{2}/{3}'.
format[database_username, database_password,
database_ip, database_name]]
frame.to_sql[con=database_connection, name='table_name_for_df', if_exists='replace']
6 trong bảng người dùng làm khóa chính.engine.execute['ALTER TABLE users ADD PRIMARY KEY [`id`];']