2012-07-03 27 views
6

Tôi đang sử dụng pymssql và gói Pandas sql để tải dữ liệu từ SQL vào Pandas dataframe bằng frame_query.Tôi có thể xuất khung dữ liệu Python Pandas sang MS SQL không?

Tôi muốn gửi nó trở lại cơ sở dữ liệu SQL bằng cách sử dụng write_frame, nhưng tôi đã không thể tìm thấy nhiều tài liệu về điều này. Đặc biệt, có một tham số flavor = 'sqlite'. Điều này có nghĩa là cho đến nay Pandas chỉ có thể xuất sang SQLite? Công ty của tôi đang sử dụng MS SQL Server 2008 vì vậy tôi cần phải xuất sang đó.

Trả lời

5

Thật không may, có. Tại thời điểm sqlite là "hương vị" duy nhất được hỗ trợ bởi write_frame. Xem https://github.com/pydata/pandas/blob/master/pandas/io/sql.py#L155

def write_frame(frame, name=None, con=None, flavor='sqlite'): 
    """ 
    Write records stored in a DataFrame to SQLite. The index will currently be 
    dropped 
    """ 
    if flavor == 'sqlite': 
     schema = get_sqlite_schema(frame, name) 
    else: 
     raise NotImplementedError 

Viết đơn giản là write_frame nên khá dễ dàng. Ví dụ: một cái gì đó như thế này có thể hoạt động (chưa được kiểm tra!):

import pymssql               
conn = pymssql.connect(host='SQL01', user='user', password='password', database='mydatabase') 
cur = conn.cursor()             

# frame is your dataframe            
wildcards = ','.join(['?'] * len(frame.columns))      
data = [tuple(x) for x in frame.values] 
table_name = 'Table' 

cur.executemany("INSERT INTO %s VALUES(%s)" % (table_name, wildcards), data) 
conn.commit() 
+0

Cảm ơn. Tôi tìm thấy một tùy chọn dễ dàng khác là sử dụng write_csv để tạo một tệp văn bản trên máy tính của tôi và sau đó sử dụng os.system để gọi BCP. –

1

Chỉ để cứu người khác đã cố gắng sử dụng thời gian này. Nó chỉ ra các dòng:

wildcards = ','.join(['?'] * len(frame.columns)) 

nên là:

wildcards = ','.join(['%s'] * len(frame.columns)) 

Hy vọng rằng sẽ giúp

+0

Điều đó phụ thuộc vào cơ sở dữ liệu cụ thể mà bạn đang sử dụng, đúng không? –

Các vấn đề liên quan