Mã của bạn đã chứa một cách tuyệt vời để thực thi tất cả các câu lệnh từ một tệp SQL được chỉ định
# Open and read the file as a single buffer fd = open('ZooDatabase.sql', 'r') sqlFile = fd.read() fd.close() # all SQL commands (split on ';') sqlCommands = sqlFile.split(';') # Execute every command from the input file for command in sqlCommands: # This will skip and report errors # For example, if the tables do not yet exist, this will skip over # the DROP TABLE commands try: c.execute(command) except OperationalError, msg: print("Command skipped: ", msg)Kết thúc điều này trong một chức năng và bạn có thể sử dụng lại nó.
def executeScriptsFromFile(filename): # Open and read the file as a single buffer fd = open(filename, 'r') sqlFile = fd.read() fd.close() # all SQL commands (split on ';') sqlCommands = sqlFile.split(';') # Execute every command from the input file for command in sqlCommands: # This will skip and report errors # For example, if the tables do not yet exist, this will skip over # the DROP TABLE commands try: c.execute(command) except OperationalError, msg: print("Command skipped: ", msg)Để dùng nó
executeScriptsFromFile('zookeeper.sql')Bạn nói rằng bạn đã bối rối bởi
result = c.execute("SELECT * FROM %s;" % table);Trong Python, bạn có thể thêm nội dung vào một chuỗi bằng cách sử dụng một thứ gọi là định dạng chuỗi.
Bạn có một chuỗi "Some string with %s" với %s, đó là một trình giữ chỗ cho một thứ khác. Để thay thế trình giữ chỗ, bạn thêm % ("những gì bạn muốn thay thế nó bằng") sau chuỗi của bạn
ex:
a = "Hi, my name is %s and I have a %s hat" % ("Azeirah", "cool") print(a) >>> Hi, my name is Azeirah and I have a Cool hatMột chút của một ví dụ trẻ con, nhưng nó nên rõ ràng.
Giờ thì sao
result = c.execute("SELECT * FROM %s;" % table);có nghĩa là nó thay thế %s bằng giá trị của biến bảng.
(được tạo ra tại)
for table in ['ZooKeeper', 'Animal', 'Handles']: # for loop example for fruit in ["apple", "pear", "orange"]: print(fruit) >>> apple >>> pear >>> orangeNếu bạn có bất kỳ câu hỏi bổ sung, hãy chọc tôi.
Nếu bạn đang tìm kiếm một cách để kết nối Python với SQL Server để tìm nạp dữ liệu, thì không tìm đâu xa. Chỉ cần làm theo tất cả các bước dưới đây và bạn sẽ chạy và chạy ngay lập tức!
Lưu ý: Thêm đặt số Nocount vào; đến dòng đầu tiên của tập lệnh SQL của bạn trước khi đọc thêm nữa.add SET NOCOUNT ON; to the first line of your sql script before reading any further.
Các bước bao gồm các chủ đề sau:
Định vị tệp .sql của bạn
Nhận đúng mã hóa tệp .sql của bạn
Chuyển đổi tệp .sql của bạn thành một chuỗi
Kết nối với SQL Server
Tìm nạp dữ liệu từ SQL Server
Đóng kết nối mở
Để tất cả chúng cùng nhau
Python - định vị tệp SQL gần đây nhất
Thành thật mà nói: Đó không phải là tình huống lý tưởng để có các tập lệnh SQL được lưu dưới dạng tệp cục bộ. Bạn sẽ tốt hơn khi có các lượt xem được lưu trong chính SQL Server. Nhưng bạn có thấy mình trong tình huống bạn có các tệp SQL cục bộ không? Bạn đã đến đúng trang.
Khi viết các tập lệnh SQL và lưu nó vào các tệp .sql, mọi thứ có thể trở nên lộn xộn. Tôi đã từng có các thư mục chứa 'phiên bản X.X', nhưng cũng là 'bản sao của phiên bản X.X', địa ngục, thậm chí là 'bản sao của phiên bản X.X'. Tôi đã cảm thấy khó chịu vì điều này, vì vậy một thời gian dài trước đây, tôi đã thay đổi cách làm việc của mình để:sql scripts and saving it to .sql files, things can get messy. I used to have folders containing 'version x.x', but also 'copy of version x.x', hell, even a 'copy of copy of version x.x'. I was annoyed by this, so a long time ago, I changed my way of working to:
'name_of_file' theo sau là '_YyMMDDHHMM' để thư mục của tôi gọn gàng như một ngăn kéo nhà bếp và tôi có thể tìm thấy phiên bản mới nhất. Cách làm việc này cũng có ích khi bạn muốn Python luôn nhập phiên bản mới nhất của bạn. Và đó chỉ là những gì chúng ta theo đuổi.always import your latest version. And that's just what we're after.
Nhập hệ điều hành
#def để tìm SQL_FILE
def locate_sql_file (thư mục, started_with):
In ('OK, hãy để tôi tìm kiếm tệp mới nhất, bắt đầu bằng:' +str (starts_with))
thử:
cho f_name trong Os.ListDir (thư mục):
thử:
Nếu f_name.startswith (starts_with):
FILENAME_W_EXT = str (os.path.basename (f_name))
print ("Tệp tìm thấy:" + filename_w_ext)
sql_location = firderlocation + "\\" + filename_w_ext
Trả về SQL_Location
ngoại trừ:
in ('oops ... không thể tìm thấy bản-scre trong thư mục: \ n'+thư mục)
ngoại trừ:
in ('oops ... không thể tìm thấy bản-scre trong thư mục: \ n'+thư mục)
Python - Đoán mã hóa tệp SQL
Python là tuyệt vời để tìm nạp dữ liệu ra khỏi SQL Server và tải nó vào khung dữ liệu gấu trúc. Bây giờ chúng tôi đã tìm thấy tệp SQL của chúng tôi, chúng tôi muốn nhập nó vào Python. Điều duy nhất là: khi nhập tệp .sql chứa sql-script thực tế, Python đoán mã hóa. Điều đó nói rằng: đôi khi nó đoán nó sai, ném một lỗi. Chức năng dưới đây sẽ giúp bạn có được mã hóa phù hợp..sql file which contains the actual SQL-script, Python guesses the encoding. That said: it sometimes guesses it wrong, throwing an error. The function below will help you with getting the right encoding.
Nhập khẩu địa phương
Nhập IO
#Def để đoán mã hóa tệp SQL
def guess_encoding (tệp):
"" "Đoán mã hóa của tệp đã cho" ""
với io.open (tệp, "rb") là f:
Data = F.Read (5)
Nếu data.startswith (b "\ xef \ xbb \ xbf"): # utf-8 với "bom"
Trả lại "UTF-8-SIG"
elif data.startswith (b "\ xff \ xfe") hoặc data.startswith (b "\ xfe \ xff"):
Trả lại "UTF-16"
Khác: # Đoán UTF-8 không hoạt động trong Windows, vì vậy chúng tôi chỉ cần thử:
thử:
với io.open (tệp, mã hóa = "utf-8") là f:
Trả lại "UTF-8"
ngoại trừ:
trả về locale.getDefaultLocale () [1]
Python - Chuyển đổi SQL thành một chuỗi
Địa điểm? Kiểm tra. Mã hóa? Kiểm tra. Hãy tạo một chuỗi SQL của chúng tôi. script.
Nhập văn bản
#def để tạo chuỗi truy vấn
def created_query_string (SQL_FILE):
với Open (sql_file, 'r', mã hóa = đoán_encoding (sql_file)) là f_in:
dòng = f_in.read ()
# Xóa khoảng trắng hàng đầu thông thường khỏi tất cả các dòng
query_string = textwrap.dedent ("" "{}" "". định dạng (dòng))
trả về query_string
in ('Tìm thấy tệp và tạo một chuỗi được chuyển đổi.')
Python - Kết nối với SQL Server
Bây giờ chúng tôi có tệp vị trí của chúng tôi, có mã hóa đúng và nhập truy vấn SQL vào một chuỗi, đã đến lúc kết nối với SQL Server.
Nhập pypyodbc
#Connect với SQL Server
def open_connection ():
thử:
với io.open (tệp, mã hóa = "utf-8") là f:
Trả lại "UTF-8"
ngoại trừ:
trả về locale.getDefaultLocale () [1]
Python - Chuyển đổi SQL thành một chuỗi
Địa điểm? Kiểm tra. Mã hóa? Kiểm tra. Hãy tạo một chuỗi SQL của chúng tôi. script.
Nhập văn bản
ngoại trừ:
trả về locale.getDefaultLocale () [1]
Python - Chuyển đổi SQL thành một chuỗi
Địa điểm? Kiểm tra. Mã hóa? Kiểm tra. Hãy tạo một chuỗi SQL của chúng tôi. script.
Nhập văn bản
#def để tạo chuỗi truy vấn
thử:
với io.open (tệp, mã hóa = "utf-8") là f:
Trả lại "UTF-8"
ngoại trừ:
trả về locale.getDefaultLocale () [1]
Python - Chuyển đổi SQL thành một chuỗi
Địa điểm? Kiểm tra. Mã hóa? Kiểm tra. Hãy tạo một chuỗi SQL của chúng tôi. script.
Nhập văn bản
#def để tạo chuỗi truy vấn
thử:
với io.open (tệp, mã hóa = "utf-8") là f:
Trả lại "UTF-8"
ngoại trừ:
trả về locale.getDefaultLocale () [1]
Python - Chuyển đổi SQL thành một chuỗi
Địa điểm? Kiểm tra. Mã hóa? Kiểm tra. Hãy tạo một chuỗi SQL của chúng tôi. script.
Nhập văn bản
#def để tạo chuỗi truy vấn
def created_query_string (SQL_FILE):
với Open (sql_file, 'r', mã hóa = đoán_encoding (sql_file)) là f_in:
dòng = f_in.read ()
# Xóa khoảng trắng hàng đầu thông thường khỏi tất cả các dòng
query_string = textwrap.dedent ("" "{}" "". định dạng (dòng))
trả về query_string
open_connection()
in ('Tìm thấy tệp và tạo một chuỗi được chuyển đổi.')
create_df()
Python - Kết nối với SQL Server
close_connection()
Bây giờ chúng tôi có tệp vị trí của chúng tôi, có mã hóa đúng và nhập truy vấn SQL vào một chuỗi, đã đến lúc kết nối với SQL Server.