Немного об объединении вещей выше.
def print_caller_name (stack_size = 3): def wrapper (fn): def internal (* args, ** kwargs): import проверить stack = inspect.stack ( ) modules = [(index, inspect.getmodule (stack [index] [0])) для индекса в обратном (диапазон (1, stack_size))] module_name_lengths = [len (module .__ name__) для _, модуль в модулях] s = '{index: & gt; 5}: {module: ^% i}: {name}'% (max (module_name_lengths) + 4) callers = ['', s.format (index = 'level', module = ' module ', name =' name '),' - '* 50] для индекса, модуль в модулях: callers.append (s.format (index = index, module = module .__ name__, name = stack [index] [3] )) callers.append (s.format (index = 0, module = fn .__ module__, name = fn .__ name__)) callers.append ('') print ('\n'.join (вызывающие)) fn (* args , ** kwargs) return inner return wrapper
Использование:
@print_caller_name (4) def foo (): return 'foobar' def bar () : return foo () def baz (): return bar () def fizz (): return baz () fizz ()
output is
level : module: name -------- ------------------------------------------ 3: Нет: fizz 2: None : baz 1: None: bar 0: __main__: foo
Что вам нужно сделать, это ПРИСОЕДИНЯЙТЕСЬ к таблицам.
Наиболее распространенные типы JOIN:
Пример
SELECT
ft.id,
ft.file_name,
ft.file_description,
ft.file_url,
af.id as access_id,
af.student_id,
af.file_id
FROM
files ft
INNER JOIN access_files af ON ( ft.id = af.file_id )
WHERE
fa.student_id = '$studentid'
Присоедините свои таблицы.
SELECT table1.*, table2.*
FROM table1
LEFT JOIN table1.pk = table2.fk
WHERE table1.pk = 1;
Вы делаете классическое декартовое соединение с вашим запросом:
SELECT * FROM files, access_files WHERE student_id ='$studentid'
Вам нужно указать, как связаны две таблицы:
SELECT * FROM files a, access_files b WHERE a.student_id ='$studentid' and b.studentID=a.student_id
Если вы не укажите ссылку - или ее нет, база данных попытается связать каждую строку в первой таблице с каждой отдельной строкой во второй.