【问题标题】:Python MySQL Connector not insertingPython MySQL连接器未插入
【发布时间】:2020-07-22 17:03:14
【问题描述】:

这是我的代码。我不知道为什么插入不起作用。选择语句有效。 try catch 不会失败,也不会导致我相信查询正在执行。在 MySQL Workbench 中手动输入插入查询似乎也可以正常工作。

def runQuery(query):
    try:
        conn = mysql.connector.connect(host='localhost',
                                       database='optionsdata',
                                       user='python',
                                       passwd='python')
        cursor = conn.cursor()
        cursor.execute(query)
        conn.close()
        cursor.close()
        print(query)
    except Error as e:
        print("Error", e)

def convertDate(date_str):
    date_object = datetime.datetime.strptime(date_str, '%m/%d/%Y').date()
    return date_object

ticker = "MSFT"
html = urlopen("https://api.nasdaq.com/api/quote/" + ticker + "/option-chain?assetclass=stocks&todate=2020-05-08&fromdate=2020-04-07&limit=0").read().decode('utf-8')
optionsData = json.loads(html)
rows = optionsData["data"]["optionChainList"]["rows"]

for row in rows:
    call = row["call"]
    expiryDate = convertDate(call["expiryDate"])
    query = "INSERT INTO `optionsdata`.`call` (`ticker`, `symbol`, `last`, `change`, `bid`, `ask`, `volume`, `openinterest`, `strike`, `expiryDate`, `grabTime`) VALUES ('{0}', '{1}', '{2}', '{3}', '{4}', '{5}', '{6}', '{7}', '{8}', '{9}', '{10}');".format(ticker, call["symbol"], call["last"], call["change"], call["bid"], call["ask"], call["volume"], call["openinterest"], call["strike"], expiryDate, datetime.datetime.now())
    runQuery(query)

插入查询的样例

INSERT INTO `optionsdata`.`call` (`ticker`, `symbol`, `last`, `change`, `bid`, `ask`, `volume`, `openinterest`, `strike`, `expiryDate`, `grabTime`) VALUES ('MSFT', '@MSFT  200508C00175000', '3.21', '-0.29', '2.80', '4.25', '54', '228', '175.00', '2020-05-08', '2020-04-09 19:39:22.554538');

【问题讨论】:

    标签: python mysql python-3.x mysql-python


    【解决方案1】:

    我认为这是一个很好的问题!几周前,我花了 小时 试图解决这个问题。这很棘手,因为执行查询后,您必须调用

    conn.commit()
    

    真正更新数据。所以像这样改变你的runQuery函数:

    def runQuery(query):
        try:
            conn = mysql.connector.connect(host='localhost',
                                           database='optionsdata',
                                           user='python',
                                           passwd='python')
            cursor = conn.cursor()
            cursor.execute(query)
            conn.commit()  # Added commit line
            conn.close()
            cursor.close()
            print(query)
        except Error as e:
            print("Error", e)
    

    请参阅this doc page 了解更多信息。

    【讨论】:

      猜你喜欢
      • 2013-06-07
      • 2013-06-05
      • 2013-03-13
      • 2014-03-25
      • 2020-12-23
      • 2018-10-25
      • 2013-02-07
      • 2020-11-06
      • 2021-09-10
      相关资源
      最近更新 更多