Решено: python (не понимаю)

Модератор: Модераторы разделов

Аватара пользователя
nadge
Сообщения: 1519
ОС: ArchLinux, Ubuntu 10.10

Решено: python

Сообщение nadge »

Промучал весь день мозг перлом и уже к ночи решил, что лучше вместо него освоить все же питон :)

Собственно вопрос: почему не работает этот код?

Код: Выделить всё

import sqlite3

mydb = sqlite3.connect('db/mh.sqlite3')

def mydb_cleanupalltables():
    global mydb

    if not mydb.execute("DELETE FROM friends"): return False
    if not mydb.execute("DELETE FROM log"): return False

    return True

mydb_cleanupalltables()

mydb.close()

Т.е. содержимое таблиц не удаляется, никаких сообщений не выводится, ф-ция vkdb_cleanupalltables возвращает True. В то время как аналогичный запрос, произведенный из скрипта на php работает. И запрос SELECT из скрипта на питоне тоже работает.

З.Ы. Какое значение в каком случае должна возвращать mydb.execute? Ато документация на python.org какая-то очень неподробная.
Спасибо сказали:
watashiwa_daredeska
Бывший модератор
Сообщения: 4038
Статус: Искусственный интеллект (pre-alpha)
ОС: Debian GNU/Linux

Re: Решено: python

Сообщение watashiwa_daredeska »

mydb.commit() перед mydb.close()?
Спасибо сказали:
watashiwa_daredeska
Бывший модератор
Сообщения: 4038
Статус: Искусственный интеллект (pre-alpha)
ОС: Debian GNU/Linux

Re: Решено: python

Сообщение watashiwa_daredeska »

nadge писал(а): ↑
18.12.2009 02:23
З.Ы. Какое значение в каком случае должна возвращать mydb.execute? Ато документация на python.org какая-то очень неподробная.
Connection.execute() ссылается на Cursor.execute(), документация ссылается на PEP 249, в PEP для Cursor.execute() указано:
Return values are not defined.
В случае ошибок, должны кидаться исключения (см. PEP 249).
Спасибо сказали:
Аватара пользователя
nadge
Сообщения: 1519
ОС: ArchLinux, Ubuntu 10.10

Re: Решено: python

Сообщение nadge »

Спасибо. Разобрался и с тем и с другим.
Спасибо сказали:
Аватара пользователя
nadge
Сообщения: 1519
ОС: ArchLinux, Ubuntu 10.10

Re: Решено: python

Сообщение nadge »

У меня еще вопрос возник чайниковский, решил написать сюда, дабы не плодить темы.

Допустим, надо вставить в одну строку другую. На php, перле и баше, если не ошибаюсь, это делается так:

Код: Выделить всё

$str1 = "la-la-la $str2 la-la-la";


Можно ли так в питоне или тут только при помощи %s?
Спасибо сказали:
Аватара пользователя
aandy
Сообщения: 57
ОС: Rosa Linux

Re: Решено: python

Сообщение aandy »

Код: Выделить всё

$ python
Python 2.5.2 (r252:60911, Jan  4 2009, 17:40:26)
[GCC 4.3.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> str1 = "STR_1"
>>> str2 = "STR_2"
>>> print str1+str2
STR_1STR_2
>>> str3 = str1+str2
>>> print str3
STR_1STR_2
>>>

оно?
Здесь был я.
Спасибо сказали:
MrSinister
Сообщения: 95

Re: Решено: python

Сообщение MrSinister »

Наверное он имел ввиду это:

Код: Выделить всё

a = "you"
b = "Hey %s!" % a


Или это:

Код: Выделить всё

>>> vals = {'first' : 'you', 'second' : 'hell'}
>>> b = "Hey, %(first)s! What a %(second)s is going on here?" % vals
>>> b
'Hey, you! What a hell is going on here?'
Спасибо сказали:
Аватара пользователя
nadge
Сообщения: 1519
ОС: ArchLinux, Ubuntu 10.10

Re: Решено: python

Сообщение nadge »

aandy
Про сумму я знаю, но запись получается некрасивая и трудная для ввода, если много переменных:

Код: Выделить всё

str1 = "la-la-la " + $str2 + " la-la-la"

Когда нужно вставить в строку десяток переменных - это реально не неудобно.

MrSinister
Я выше это упомянул. Имелся ввиду именно вариант, когда в исходном тексте прямо в строку вставляется переменная, что очень удобно и выглядит наглядно при написании программ (см. ниже).

Допустим, на баше можно написать так:

Код: Выделить всё

str1 = "lala $str2 lala $str3 lala $str4 lala $str5 lala $str6 lala $str7 lala $str8"


А в питоне получается только через упомянутый % ? Просто ни в одном учебнике я не нашел, но подумал, что может в новых версиях это появилось, а учебники пока не поспели за прогрессом?
Спасибо сказали:
Аватара пользователя
agentprog
Сообщения: 362
Статус: Ad Astra per aspera
ОС: openSUSE 11.4, Arch

Re: Решено: python

Сообщение agentprog »

в питоне у переменных нет никаких префиксов типа $, так что только через + или аргументами. кст, вообще можно как то так:

Код: Выделить всё

str1 = "test"
str2 = "This is a %s" % str1

так получается без вспомогательных хэшей, в стиле си.
No problems - just solutions!
Спасибо сказали:
watashiwa_daredeska
Бывший модератор
Сообщения: 4038
Статус: Искусственный интеллект (pre-alpha)
ОС: Debian GNU/Linux

Re: Решено: python

Сообщение watashiwa_daredeska »

nadge писал(а): ↑
20.12.2009 01:07
Я выше это упомянул. Имелся ввиду именно вариант, когда в исходном тексте прямо в строку вставляется переменная, что очень удобно и выглядит наглядно при написании программ

Код: Выделить всё

str1 = "test"
str2 = "This is a %(str1)s" % vars()
Спасибо сказали:
Аватара пользователя
nadge
Сообщения: 1519
ОС: ArchLinux, Ubuntu 10.10

Re: Решено: python

Сообщение nadge »

str1 = "test"
str2 = "This is a %(str1)s" % vars()

О! Годится! То, что нужно)

---------------

str1 = "test"
str2 = "This is a %s" % str1

Так питон дает задать только одну переменную. Для большего кол-ва надо то, что после %, писать в скобках как кортеж:

Код: Выделить всё

str3 = "This is a %s, %s" % (str1, str2)

Недостаток тут в том, что приходится глазами бегать то в середину строки, то в кортеж с переменными. А в варианте предложенном watashiwa_darede... это не нужно, что несколько упростит работу над программой. (Я это к тому, что простота для программиста - одна из целей питона.)

---------------

ОК, вобщем ответ найден :) Всем спасибо
Спасибо сказали:
Аватара пользователя
deadhead
Сообщения: 1913
Статус: zzz..z

Re: Решено: python

Сообщение deadhead »

[x] close
Спасибо сказали:
Аватара пользователя
nadge
Сообщения: 1519
ОС: ArchLinux, Ubuntu 10.10

Re: Решено: python

Сообщение nadge »

deadhead
О, хорошая штука, учту, спасибо.
Спасибо сказали: