2017-03-01 69 views
1

一點點的noob在這裏。即時嘗試創建一個python腳本來強調測試基於SQL的數據庫。pyodbc.connect上的pyodbc segfault

我一直都試圖用pyodbc連接到數據庫,但是我在pyodbc.connect跑進分段錯誤(的connectionString)

#connects to the database 
def connectToDb(): 
print(labels.OKBLUE + "Connecting to: " + args.ip + " at port: " + args.port) 

connString = "" 
connString = connString + ';DRIVER=' + args.driver 
connString = connString +';SERVER=' + args.ip 
if not args.port == "": 
    connString = connString + ';PORT=' + args.port 
connString = connString + ';UID=' + args.user 
connString = connString + ';PWD=' + args.password 
connString = connString + ';Encrypt=yes;Connection Timeout=30' 
if not args.database == None or not args.database == "": 
    connString = connString + ";Database=" + args.database 
try: 
    print(connString) #for debugging 
    conn = pyodbc.connect(connString) 
except pyodbc.Error as ex: 
    for arg in ex.args: 
     print(labels.FAIL + arg) 
    sys.exit() 

返回此:剛剛

;DRIVER={FreeTDS};SERVER=127.0.0.1;PORT=3306;UID=root;PWD=********;Encrypt=yes;Connection Timeout=30;Database=test 

Segmentation fault 

IM試圖連接到本地的MySQL服務器,我不知道是什麼造成這一點,任何幫助和建議,不勝感激

編輯:

的Debian傑西作爲操作系統

蟒3最新

ODBC最新

freetds的v0.91

TDS版本4.2

- Jort

+0

分割故障發生的兩個中的一個原因: 1)你一個C模塊 – Fuzzybear

+0

在耗盡內存 2)錯誤請[編輯]你的問題,包括更多的細節,如:操作系統。 Python版本。 pyodbc版本。 MySQL連接器/ ODBC的ODBC驅動程序版本。 (請注意,FreeTDS無法連接到MySQL;它僅適用於SQL Server和Sybase。) –

+0

@GordThompson> FreeTDS無法連接到MySQL;我不知道,我應該使用哪個驅動程序連接到MySQL數據庫。我有足夠的麻煩得到這一個工作,這是我看到彈出最多的時候,當我正在尋找答案,所以我只是假設它會工作。 – ghostwolf

回答

3

根本原因你的問題是你正在嘗試使用FreeTDS ODBC d河訪問MySQL數據庫。 FreeTDS ODBC僅用於連接到Microsoft SQL Server和Sybase數據庫。用於連接到MySQL數據庫的ODBC驅動程序是MySQL Connector/ODBC

值得一提的是,我能夠使用Ubuntu存儲庫中提供的FreeTDS ODBC驅動程序在Ubuntu 16.04下重現您的問題。在「Segmentation fault(core dumped)」錯誤之後,堆棧跟蹤表明該故障實際發生在FreeTDS ODBC驅動程序本身(libtdsodbc.so)中。

雖然可以認爲Segmentation Fault錯誤應該「永遠不會發生」,但試圖升級此問題可能沒有意義。這是一個經典的案例

病人:當我這樣做的時候會很痛。
醫生:然後停止這樣做。在python

+1

非常感謝,似乎我只是因爲不知道每個系統是如何工作而造成了一個新手的錯誤,也非常感謝將我指向正確的驅動程序。 – ghostwolf