[英]Create and update SQLite db from python .exe-file (using cx_Freeze)
問候! 這是我在使用論壇幾年后的第一個問題。 我會盡力遵循這些准則,請對我的問題提出改進意見。
我的程序從steamspy.com API中以JSON字符串收集信息。 這些被寫入SQLite數據庫。
該程序可以直接從.py文件中正常運行,但是,我希望能夠將程序作為單個可執行文件運行和分發。
我使用cx_Freeze創建了一個.exe文件,但該程序未生成SQLite數據庫。 我在整個論壇和網絡上都進行了廣泛搜索,以尋求解決方案,但沒有任何運氣。
下面我粘貼了我的主程序steamSpy.py的代碼:
input("Press Enter to continue...")
import requests
import time
import sys
import sqlite3
import datetime
unix=time.time()
date = str(datetime.datetime.fromtimestamp(unix).strftime('%y-%m-%d'))
conn = sqlite3.connect('steamDB.db') #Starts connection
c = conn.cursor() #Starts cursor
def create_table():
c.execute('Create TABLE IF NOT EXISTS steamData(counter REAL, date REAL, name TEXT, developer TEXT, score_rank REAL, owners REAL, owners_variance REAL, players_forever REAL, players_forever_variance REAL, players_2weeks REAL, players_2weeks_variance REAL, average_forever REAL, average_2weeks REAL, median_forever REAL, median_2weeks REAL, ccu REAL, price REAL)')
def dynamic_data_entry():
# score_rank = []
# owners = []
c.execute("INSERT INTO steamData (counter, date, name, developer, score_rank , owners , owners_variance , players_forever , players_forever_variance , players_2weeks , players_2weeks_variance , average_forever , average_2weeks , median_forever , median_2weeks , ccu , price) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)",
(counter, date, str(name)[2:-2], str(developer)[2:-2], str(score_rank)[1:-1], str(owners)[1:-1], str(owners_variance)[1:-1], str(players_forever)[1:-1], str(players_forever_variance)[1:-1], str(players_2weeks)[1:-1], str(players_2weeks_variance)[1:-1], str(average_forever)[1:-1], str(average_2weeks)[1:-1], str(median_forever)[1:-1], str(median_2weeks)[1:-1], str(ccu)[1:-1], str(price)[2:-2]))
conn.commit()
create_table()
def read_from_db():
c.execute("SELECT counter, date FROM steamData WHERE counter=1") #cursor is populated now * but nothing has happened
data_read = c.fetchall()
if any(date in s for s in data_read):
c.close() #Ends connection
conn.close()
sys.exit('Caution! Data from current date is already present in the database... Ending process')
#Check for updated data
read_from_db()
#Get data
baseURL = "http://steamspy.com/api.php?request="
request = "appdetails&appid="
codes = ["570", "518790", "322920", "253710"]
url = codes
counter = 0
for x in url:
counter = counter + 1
response = requests.get(baseURL + request + x)
data = response.json()
name = [data["name"]]
developer = [data["developer"]]
score_rank = [data["score_rank"]]
owners = [data["owners"]]
owners_variance = [data["owners_variance"]]
players_forever = [data["players_forever"]]
players_forever_variance = [data["players_forever_variance"]]
players_2weeks = [data["players_2weeks"]]
players_2weeks_variance = [data["players_2weeks_variance"]]
average_forever = [data["average_forever"]]
average_2weeks = [data["average_2weeks"]]
median_forever = [data["median_forever"]]
median_2weeks = [data["median_2weeks"]]
ccu = [data["ccu"]]
price = [data["price"]]
#Write to database
dynamic_data_entry()
time.sleep(0.25)
#Close connection
c.close() #Ends connection
conn.close()
print("Program finished.")
接下來是我的setup.py文件代碼:
from cx_Freeze import setup, Executable
setup(name='steamSpy',
version='0.2',
description='Gather_data',
executables=[Executable("steamSpy.py")])
這很可能是微不足道的信息,但是如果有人有疑問,可以在命令提示符下使用以下行之一來創建可執行文件:
python setup.py構建
python setup.py bdist_msi
setup.py應該包括您的python程序中使用的所有模塊。 sqlite3另外還需要特定的.dll文件。
試試這個setup.py,它應該可以工作。
from cx_Freeze import setup, Executable
import sys
import os
build_exe_options = {"packages": [
'requests', 'time', 'sys', 'sqlite3', 'datetime'], "excludes": ["tkinter"], 'include_files': [os.path.join(sys.base_prefix, 'DLLs', 'sqlite3.dll')]}
setup(name='steamSpy',
version='0.2',
description='Gather_data',
options={"build_exe": build_exe_options},
executables=[Executable("steamSpy.py")])
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.