Tôi có tập lệnh Python nhập dữ liệu Excel, định dạng một vài cột/hàng và lưu kết quả dưới dạng CSV. Sau đó, CSV này được chuyển đến một thư mục máy chủ [thông qua tập lệnh] để tôi có thể chạy truy vấn SQL INSERT hàng loạt để điền nội dung của nó vào Bảng SQL. Tuy nhiên, tập lệnh của tôi sẽ thêm ngày hiện tại vào tên tệp khi lưu CSV. Làm cách nào tôi có thể chỉnh sửa phần CHÈN hàng loạt trong mã của mình để đảm bảo nó ghi lại tên tệp này mỗi khi tập lệnh được chạy, để tôi không phải chỉnh sửa phần SQL theo cách thủ công?
Đây là phần có liên quan trong tập lệnh của tôi [phần SQL có *** cho biết nơi tôi muốn tên mới được tự động ghi lại [e. g. testdata_15092020. csv]]
import os
import pandas as pd
import shutil
import glob
import pyodbc
os.system["cls"]
# ...Multiple formatting steps...
currenttime = pd.to_datetime['today'].strftime['%d%m%Y']
join.to_csv["testdata_" + currenttime + ".csv", index=False]
for CSVfile in glob.iglob[os.path.join['CURRENT WORKING DIRECTORY', "*.csv"]]:
shutil.copy[CSVfile, 'SQL SERVER FILE DIRECTORY']
# ...Connection to SQL Database section...
cursor.execute["""BULK INSERT testdb.dbo.scriptresults
FROM '\\\SERVERNAME\\TESTFILES\\***.csv'
WITH
[
FIRSTROW = 2,
FIELDTERMINATOR = ',',
ROWTERMINATOR = '\n'
];"""]
cnxn.commit[]
- stackoverflow. comghi bàn. 0
câu trả lời được chấp nhận
Còn cái này thì sao?
file_name = "testdata_" + currenttime + ".csv"
cursor.execute["""BULK INSERT master.dbo.scriptresults
FROM '\\\SERVERNAME\\TESTFILES\\""" + file_name + """'
WITH
[
FIRSTROW = 2,
FIELDTERMINATOR = ',',
ROWTERMINATOR = '\n'
];"""]
Thêm câu hỏi với thẻ tương tự
Có nhiều cách để nhập tệp CSV vào SQL Server bằng Python. Trong hướng dẫn này, bạn sẽ thấy một kỹ thuật đơn giản để nhập dữ liệu của mình bằng 2 thư viện Python sau
- Pandas – được sử dụng để nhập tệp CSV vào Python và tạo DataFrame
- Pyodbc – dùng để kết nối Python với SQL Server
Các bước để nhập tệp CSV vào SQL Server bằng Python
Bước 1. Chuẩn bị tệp CSV
Để bắt đầu, hãy chuẩn bị tệp CSV mà bạn muốn nhập vào SQL Server
Ví dụ: giả sử rằng một tệp CSV đã được chuẩn bị, trong đó
- Tên tệp CSV là 'sản phẩm'
- Tệp CSV được lưu trữ theo đường dẫn sau. C. \Users\Ron\Desktop\Test\products. csv
Ngoài ra, tệp CSV chứa dữ liệu sau
product_idproduct_nameprice1Laptop12002Printer2003Tablet3504Keyboard805Monitor400Bước 2. Nhập tệp CSV vào DataFrame
Bạn có thể sử dụng thư viện Pandas để nhập tệp CSV vào DataFrame
Đây là mã để nhập tệp CSV cho ví dụ của chúng tôi [lưu ý rằng bạn sẽ cần thay đổi đường dẫn để phản ánh vị trí lưu trữ tệp CSV trên máy tính của bạn]
import pandas as pd data = pd.read_csv [r'C:\Users\Ron\Desktop\Test\products.csv'] df = pd.DataFrame[data] print[df]
Đây là cách DataFrame trông như thế nào trong Python
product_id product_name price
0 1 Laptop 1200
1 2 Printer 200
2 3 Tablet 350
3 4 Keyboard 80
4 5 Monitor 400
Bước 3. Kết nối Python với máy chủ SQL
Để kết nối Python với máy chủ SQL, bạn sẽ cần
- Tên máy chủ. Đối với mục đích trình diễn, giả sử rằng tên máy chủ là. RON\SQLEXPRESS
- Tên cơ sở dữ liệu. Tên cơ sở dữ liệu cho ví dụ của chúng tôi sẽ là. test_database
Đây là mã để kết nối Python với SQL cho ví dụ của chúng tôi
import pyodbc conn = pyodbc.connect['Driver={SQL Server};' 'Server=RON\SQLEXPRESS;' 'Database=test_database;' 'Trusted_Connection=yes;'] cursor = conn.cursor[]
Bạn có thể muốn kiểm tra hướng dẫn sau giải thích các bước đầy đủ để kết nối Python với SQL Server bằng pyodbc
Bước 4. Tạo bảng trong SQL Server bằng Python
Tiếp theo, thêm cú pháp tạo bảng trong SQL Server. Bảng này sẽ được sử dụng để lưu trữ dữ liệu đã nhập từ tệp CSV
Ví dụ của chúng tôi, bạn có thể thêm cú pháp sau để tạo bảng 'sản phẩm'
cursor.execute[''' CREATE TABLE products [ product_id int primary key, product_name nvarchar[50], price int ] ''']
Lưu ý rằng bất cứ khi nào bạn chạy mã để tạo bảng. Bạn chỉ nên sử dụng đoạn mã đó một lần. Nếu không, bạn sẽ gặp lỗi bên dưới.
Lỗi lập trình. ['42S01′, “[42S01] [Microsoft][ODBC SQL Server Driver][SQL Server] Đã có một đối tượng có tên là 'sản phẩm' trong cơ sở dữ liệu. [2714] [SQLExecDirectW]”]
Bước 5. Chèn dữ liệu DataFrame vào bảng
Đây là cú pháp để chèn dữ liệu DataFrame [từ bước 2] vào bảng sản phẩm
for row in df.itertuples[]: cursor.execute[''' INSERT INTO products [product_id, product_name, price] VALUES [?,?,?] ''', row.product_id, row.product_name, row.price ] conn.commit[]
Và đây là toàn bộ mã để nhập tệp CSV vào SQL Server bằng Python
import pandas as pd import pyodbc # Import CSV data = pd.read_csv [r'C:\Users\Ron\Desktop\Test\products.csv'] df = pd.DataFrame[data] # Connect to SQL Server conn = pyodbc.connect['Driver={SQL Server};' 'Server=RON\SQLEXPRESS;' 'Database=test_database;' 'Trusted_Connection=yes;'] cursor = conn.cursor[] # Create Table cursor.execute[''' CREATE TABLE products [ product_id int primary key, product_name nvarchar[50], price int ] '''] # Insert DataFrame to Table for row in df.itertuples[]: cursor.execute[''' INSERT INTO products [product_id, product_name, price] VALUES [?,?,?] ''', row.product_id, row.product_name, row.price ] conn.commit[]
Chạy mã bằng Python [sau khi thực hiện điều chỉnh đường dẫn nơi tệp CSV của bạn được lưu trữ, cũng như thực hiện thay đổi đối với thông tin kết nối cơ sở dữ liệu của bạn]