SQLite3 Python - 第二次函数调用后未更新的列(初级程序员)

时间:2016-11-18 17:43:31

标签: python database sqlite

首先,我将解释我的代码将如何运行。 mainpythonfile.py只有几行代码导入并调用另一个模块,在该模块完成后,将调用另一个模块,等等。

在我调用第一个模块后,它会按照UPDATE totalscore列的预期运行,并带有相关的ID。

代码:

#starships.py
import level1

level1.levelOne(map)

前往一级模块(此处一切都很好)

#level1.py
import RandomLocation
import sqlcreatetable
import InitMap
import level2
import time

def levelOne(map):
    sqlcreatetable.create_table()
    sqlcreatetable.user_entry()
    if sel_row == stship_row and sel_col == stship_col:
            InitMap.spawn_rows(map)
            sqlcreatetable.update()

            map[guess_row][guess_col] == "D"
            print "Congratulations! You Destroyed the enemy's corvette!"

            print "Name: ", 
            sqlcreatetable.read_name()

            print "Score: ", 
            sqlcreatetable.read_score()

            advanceLevel = raw_input("Advance to next level? ('y' or 'n') :")

            if advanceLevel == "y" or advanceLevel == "Y":
                level2.levelTwo(map)

地图生成和表现在在db

中更新
#level2.py
import RandomLocation
import sqlcreatetable
from sqlcreatetable import tscore
import InitMap2
import level3
import time

def levelTwo(map):
sqlcreatetable.create_table()
sqlcreatetable.user_entry()
if sel_row == stship_row and sel_col == stship_col:
        InitMap.spawn_rows(map)
        sqlcreatetable.update()

        map[guess_row][guess_col] == "D"
        print "Congratulations! You Destroyed the enemy's corvette!"

        print "Name: ", 
        sqlcreatetable.read_name()

        print "Score: ", 
        sqlcreatetable.read_score()

        advanceLevel = raw_input("Advance to next level? ('y' or 'n') :")

        if advanceLevel == "y" or advanceLevel == "Y":
            level3.levelThree(map)

这是一切都停止更新的地方

SQL

#sqlcreatetable.py
import sqlite3

conn = sqlite3.connect('playerscores.db')
c = conn.cursor()

Name = raw_input('Enter your name: ')
tscore = 0

def create_table():
    c.execute(
        """CREATE TABLE IF NOT EXISTS scores (id INTEGER PRIMARY KEY, name TEXT UNIQUE, totalscore INTEGER);"""
        )

def user_entry():
    c.execute(
        """INSERT INTO scores VALUES (NULL,?,NULL)""", (Name,)
        )
    conn.commit()

def update():
    c.execute(
        """SELECT totalscore FROM scores"""
    )

    c.execute(
        """UPDATE scores 
            SET totalscore = ? + 1
            WHERE id = (SELECT max(id) FROM scores)""", (str(tscore))
        )
    conn.commit()

def read_score():
    c.execute(
    """SELECT totalscore FROM scores WHERE id = (SELECT max(id) FROM scores);"""
        )   
    get_score = c.fetchone()
    print get_score

请注意,这些不是整个代码,只是部分代码。

对于如何改进我的数据库(收集这些名称的名称和分数)的任何建议都将不胜感激:)

1 个答案:

答案 0 :(得分:0)

找到了可能的解决方案

好吧基本上我所做的是在update_function()中创建一个新的sqlcreatetable.py,然后添加+1tscore变量,我添加+2,因为{每次score = score+1statement

时{1}}
True

但我不认为我想创建多个功能来实现相同的任务