2017-02-22 12 views
0

У меня есть следующий скрипт python.Вставьте данные в базу данных MYSQL, вызвав скрипт python через SimpleHTTPServer

import mysql.connector 

cnx = mysql.connector.connect(user='root', password = 'signal', host = '127.0.0.1', port = '1928' 
           , 
           database = 's_events') 
cursor = cnx.cursor() 

insert_stmt = "INSERT INTO t_events (eid) VALUES ('iosevent123')" 


data = 'iosevent123' 
cursor.execute(insert_stmt) 

cnx.commit() 

cnx.close() 

Я также запустил simplehttpserver, предоставляемый python.

Как вызвать вышеупомянутый скрипт, чтобы данные были вставлены в таблицу?

+0

Uh, 'python name_of_script.py' в терминале? Или вы спрашиваете что-то еще? – heyiamt

+0

@heyiamt Я знаю, как запустить его в терминале. Я хотел бы вызвать URL-адрес, например http: // localhost: 1222/a.py, из приложения IOS и вставить данные в таблицу. Это возможно? –

+0

gotcha. Извините за недопонимание. я думаю, вам нужно будет что-то сделать (например, https://gist.github.com/bradmontgomery/2219997), где сервер действует как веб-API. Приложение IOS затем отправит запрос на сервер с инструкциями по запуску функции с кодом из вашего скрипта. – heyiamt

ответ

1

вытягивать из this example как вдохновение, запустить сервер на какой-то машине, выполнив сценарий питона [Оговорка: непроверенный]

from BaseHTTPServer import BaseHTTPRequestHandler, HTTPServer 

cnx = mysql.connector.connect(user='root', password = 'signal', host = '127.0.0.1', port = '1928' 
           , 
           database = 's_events') 
cursor = cnx.cursor() 

class S(BaseHTTPRequestHandler): 
    def _set_headers(self): 
     self.send_response(200) 
     self.send_header('Content-type', 'text/html') 
     self.end_headers() 

    def do_GET(self): 
     self._set_headers() 

     # Assuming the value to insert is just provided in the URL 
     # path. e.g., "http://127.0.0.1/<val>" 
     i_slash = self.path.index('/') 
     val = self.path[(i_slash + 1):] 
     insert(val) 


def run(server_class=HTTPServer, handler_class=S, port=80): 
    server_address = ('', port) 
    httpd = server_class(server_address, handler_class) 
    print 'Starting httpd...' 
    httpd.serve_forever() 

def insert(val): 
    cursor.execute("INSERT INTO t_events (eid) VALUES ('%s');" % val) 

if __name__ == "__main__": 
    from sys import argv 

    if len(argv) == 2: 
     run(port=int(argv[1])) 
    else: 
     run() 

Как только это работает, «просто» отправить запрос GET из приложения IOS к сервер, который вы начали. (Я процитировал «просто», потому что я не работал с IOS, но представлял бы, что pinging API являются обычным явлением.)

+0

Он работает, хотя он вставляет дополнительную строку со значением favicon.ico в таблице. Любая идея, что вызывает это? –

+0

Является ли лучшей практикой иметь значения, которые мы вставляем в базу данных в качестве параметров, передаваемых через URL-адрес? Какие у меня другие альтернативы? –

+0

@adf_mobile_devoper re: favicon.ico - эта строка должна каким-то образом войти, хотя жало, отправленное в запросе. Может быть, попробуйте схватить строку запроса запроса, чтобы узнать? – heyiamt

Смежные вопросы