2016-04-11 16 views
2

私の現在のスクリプトはExcelファイルに保存しますが、私は自分のmysqlデータベースに直接アップロードしたいと思います。Pythonがmysqlデータベースに保存

for i in range(0, len(names)): 
      ws.append([names[i], str((float(sells[i])+float(buys[i]))/2.0)]) 
    except: 
     print('Cannot fetch from this link') 
print('Saving the file with name markets.xlsx') 
wb.save("markets.xlsx") 

は、どのように私は今、次のを持って、ここでのアドバイス、次の次

sql = "INSERT INTO todaysmarkets(Name,value) VALUES(%s,%s)" 

****更新*****

を行うためのループを実行します:

cnx = mysql.connector.connect(host='.com', user='', password='', database='') 
     cursor = cnx.cursor() 
     for i in range(0, len(names)): 
      cursor.execute(("INSERT INTO todaysmarkets(Name,value) VALUES(%s,%s)"), (names[i], str((float(sells[i])+float(buys[i]))/2.0))) 
      cnx.close() 

スクリプトはエラーなしで実行されますが、データベースは更新されません。

+0

ですから、のORMを使用していませんどんな種類?あなたはPythonからそれに接続する方法に関するmysqlのドキュメントを見ましたか? https://dev.mysql.com/doc/connector-python/en/connector-python-example-connectinghtml – Greg0ry

+0

あなたの質問を現在のサンプルとエラースタックで更新できますか? – Greg0ry

+0

..... updated: –

答えて

1

私はあなたがすでに知っていることを言及するでしょう - あなたの例からのもののようなSQLクエリを構築することは、誰かが望ましくない文字列を提供し、その結果として何らかのSQL注入。もちろん、使用する唯一のツールを構築しているのであれば、それは当てはまりません。私は頻繁にmysqlユーザーではなく、SQLと直接対話しないので、潜在的なSQLインジェクションを防ぐためにmysqlがエスケープ処理を行うかどうかはわかりません。 PHPの世界では、mysqliが(私が知っている限り)それを行うでしょう。

MySQLは、Pythonで開発するときに良いスタートを与えるものです。

https://dev.mysql.com/doc/connector-python/en/connector-python-example-connecting.html

私はMySQLのコネクタをインストールするには、単純ではありません見つける - ここにヘルプが見つかりました:(単に提供されたリソースから/貼り付けをコピーすることによって組み合わせ)I cannot install mysql-connector-python using pip

例Pythonのコードは次のようになります。

をもちろん、本実施例の
import mysql.connector 
cnx = mysql.connector.connect(user='scott', password='tiger', 
          host='127.0.0.1', 
          database='employees') 
cursor = cnx.cursor() 
for i in range(0, len(names)): 
    cursor.execute(("INSERT INTO todaysmarkets(Name,value) VALUES(%s,%s)"), (names[i], str((float(sells[i])+float(buys[i]))/2.0))) 

cnx.close() 

は、あなたのemployeesデータベースを作成し、からこのデータベースへscottアクセスを許可します「を前提としてい」スクリプトを実行する前にパスワードtigerのを入力してください。

あなたがORM(つまりSQLAlchemy)に行くことを決めた場合、クエリは読みやすくなります。また、Alembicのようなツールでは、将来的に必要なスキーマの移行を自動化できます。あなた自身のツールのために開発していたならば、過剰なもの)

+0

スクリプトを編集して追加しました"INSERT INTO todaysmarkets(Name、value)VALUES(%s、%%)を変更しようとするとどうなりますか?"これは私の既存のものですが、エラー "AttributeError:サポートされていない引数 'cursorclass'"(これは私自身のツールです。) –

+0

(name、value)VALUES(%(name)s、%(value)s) 'および以下のようなデータ:' {'name':names [i]、 'value': str((float(sells [i])+ float(buys [i]))/ 2.0))} '。 編集したサンプルも投稿できますか? – Greg0ry

+0

'cnx = mysql.connector.connect(ホスト= '.com'、ユーザー= ''、パスワード= ''、データベース= '') カーソル= cnx.cursor() for i (名前、値)VALUES(%s、%s)」)、(names [i]、str((float(sells [ ])+ float(buys [i]))/ 2.0))) cnx.close() ' データベースには何も追加されません –

1

まず、重労働になるライブラリが必要です。 公式mysql.connectorをお試しください。

使い方は簡単です。

connection = mysql.connector.connect(
        host=MYSQL_SERVER_ADDRESS, 
        port=MYSQL_SERVER_PORT, 
        user=MYSQL_SERVER_USER, 
        password=MYSQL_SERVER_PASS, 
        database=MYSQL_SERVER_DB 
) 

cursor = connection.cursor() 
cursor.execute(SQL_STATEMENT) 

たり、複数のparamsでそれを使用したい場合は次のようになり、あなたのケースでexecutemany

cursor.executemany(operation, seq_of_params) 

を使用する必要があります。

cursor.executemany(sql, ws) # sql is the string you posted, and ws is the data 
関連する問題