簡體   English   中英

從python .exe文件創建和更新SQLite數據庫(使用cx_Freeze)

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM