我得到了这些错误,我不知道如何修复。
该代码是一个Chart,其使用了tradingview的轻量级图表.它基本上产生自己的一些价格和其他一些数据,并作出“股票”图表。
我把数据保存到一个MySQL服务器上,但是当我想加载数据的时候,我有点卡住了。有人能帮忙吗?
错误:
connection handler failed
Traceback (most recent call last):
File "C:\Users\dudas\AppData\Local\Programs\Python\Python39\lib\site-packages\websockets\legacy\server.py", line 236, in handler
await self.ws_handler(self)
File "C:\Users\dudas\AppData\Local\Programs\Python\Python39\lib\site-packages\websockets\legacy\server.py", line 1175, in _ws_handler
return await cast(
File "C:\xampp\htdocs\chart\price.py", line 32, in server
price = result[close]
NameError: name 'close' is not defined
代码:
import asyncio
import websockets
import random
from datetime import datetime, timedelta
import json
import mysql.connector
# Establishing a database connection
cnx = mysql.connector.connect(user='root', password='',
host='localhost',
database='tradewisedb')
cursor = cnx.cursor()
# Creating the data table if it doesn't exist
cursor.execute("""
CREATE TABLE IF NOT EXISTS prices (
time BIGINT,
open FLOAT,
high FLOAT,
low FLOAT,
close FLOAT
)
""")
# Simulation parameters
price = 100.0
trend = 1
volatility = 0.02
min_price = 50.0
max_price = 150.0
fluctuation_range = 0.02
post_jump_fluctuation = 0.005
interval = timedelta(minutes=1)
async def server(websocket, path):
cursor.execute("SELECT close FROM prices ORDER BY time DESC LIMIT 1")
result = cursor.fetchone()
if result is not None:
price = result[close]
min_price = result[low]
max_price = result[high]
else:
price = 100.0
trend = 1
volatility = 0.02
min_price = 50.0
max_price = 150.0
fluctuation_range = 0.02
post_jump_fluctuation = 0.005
interval = timedelta(minutes=1) # Fetch previous data from the database
cursor.execute("SELECT * FROM prices ORDER BY time ASC LIMIT 1000")
rows = cursor.fetchall()
previous_data = [{
'time': row[0],
'open': row[1],
'high': row[2],
'low': row[3],
'close': row[4]
} for row in rows]
await websocket.send(json.dumps(previous_data))
while True:
start_time = datetime.now()
open_price = price
high_price = price
low_price = price
start_time_timestamp = int(start_time.timestamp() * 1000) # UNIX timestamp in milliseconds
while datetime.now() - start_time < interval:
# Random 'news' events
if random.random() < 0.01:
trend *= -1
volatility = fluctuation_range
# After a big jump, create some sideways movement
else:
volatility = post_jump_fluctuation
# Random 'market' fluctuations
price *= 1 + trend * volatility * random.uniform(-1, 1)
# Ensure price stays within min and max limits
if price > max_price:
price = max_price
trend = -1
elif price < min_price:
price = min_price
trend = 1
high_price = max(high_price, price)
low_price = min(low_price, price)
temp_data = {
"time": start_time_timestamp,
"open": open_price,
"high": high_price,
"low": low_price,
"close": price
}
await websocket.send(json.dumps(temp_data))
await asyncio.sleep(1)
close_price = price
data = {
"time": start_time_timestamp,
"open": open_price,
"high": high_price,
"low": low_price,
"close": close_price
}
await websocket.send(json.dumps(data))
# Inserting data into the database
add_price = ("INSERT INTO prices "
"(time, open, high, low, close) "
"VALUES (%s, %s, %s, %s, %s)")
cursor.execute(add_price, (data['time'], data['open'], data['high'], data['low'], data['close']))
cnx.commit()
start_server = websockets.serve(server, 'localhost', 8000)
asyncio.get_event_loop().run_until_complete(start_server)
asyncio.get_event_loop().run_forever()
# Closing the database connection
cursor.close()
cnx.close()
就像几乎所有我知道要尝试的东西一样。
1条答案
按热度按时间vohkndzv1#
这段代码希望你有一个名为
close
的变量。它接受该变量中的值,并在result
元组中查找该值。由于没有close
变量,因此这是一个错误。我建议把它改成这样:
在那之后的一行中,您有以下内容:
我看不出如何修复这条线:你的SQL查询没有返回一个低值。您要么需要一个不同的查询,要么需要找到一种不同的方法来获取此信息。