2014-09-23 3 views
0

Я использую python для добавления записи в базу данных. Ниже мой код, код не вызывает никаких исключений и не показывает никаких ошибок. Но мой запрос вставки не добавляет никаких записей в базу данных. Я проверил соединение с базой данных, напечатав версию mysql.Строка не добавлена ​​в базу данных

import MySQLdb 
import datetime 

db = MySQLdb.connect("localhost","root","pass","selvapractice") 

cursor = db.cursor() 

sql = "INSERT INTO setting(username,password,name,settings_createddate,settings_modifieddate) \ 
     VALUES ('Mac', 'Mohan', 'selva', datetime.datetime.now(), datetime.datetime.now())" 
try: 
    cursor.execute(sql) 
    db.commit() 
except: 
    db.rollback() 

db.close() 

Любая помощь будет принята с благодарностью!

+0

вы уверены, что не бросает исключение, вы молча ловить? Добавьте 'print()' в ваш блок 'except':' кроме Exception as e: print (e) ' – jedwards

+0

да блок исключений печатает привет. кроме: print "hello" # Откат в случае ошибки есть db.rollback() – Madhesh

+0

как найти какой тип исключения? – Madhesh

ответ

1

Рассмотрим:

import MySQLdb 
import datetime 

db = MySQLdb.connect("localhost","root","pass","selvapractice") 

cursor = db.cursor() 

# If client and server times differ, and you want the client timestamp 
now = datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S') 
sql = "INSERT INTO setting(username,password,name,settings_createddate,settings_modifieddate) \ 
     VALUES ('Mac', 'Mohan', 'selva', %s, %s)" % (now, now) 

# If they differ and you want the server timestamp 
# (or if you don't care and want the server timestamp anyway) 
sql = "INSERT INTO setting(username,password,name,settings_createddate,settings_modifieddate) \ 
     VALUES ('Mac', 'Mohan', 'selva', NOW(), NOW())" 
try: 
    cursor.execute(sql) 
    db.commit() 
except: 
    db.rollback() 
    raise 
finally: 
    db.close() 

Обратите внимание, что запрос (sql) немного отличается. Материал datetime вытаскивается из самой строки и помещается после него. См. String Formatting Operations.

Я также перевосстанавливаю исключение базы данных, поэтому вы можете увидеть, что это такое, и положить db.close() в блок finally.

Наконец, это не лучший способ сделать это. Какой-то PDO (возможно, Python Database Objects), или ORM (может быть peewee) было бы лучше.

+0

следующая ошибка TraceBack (самый последний вызов последнего):?. Файл "sel.py", в VALUES ('Mac', «Mohan ',' selva ',% d,% d) "% (datetime.datetime.now ), datetime.datetime.now()) ТипError:% d format: требуется номер, а не datetime.datetime – Madhesh

+0

Что такое тип поля последних двух столбцов ('settings_createddate',' settings_modifieddate')? – jedwards

+0

timestamp, timestamp – Madhesh

1

Укажите переменные, используя% S или% (имя) s стиль параметра

sql = "INSERT INTO setting(username,password,name,settings_createddate,settings_modifieddate) \ 
    VALUES (%s, %s, %s %s, %s)" 
try: 
    args = ('Mac', 'Mohan', 'Mohan', datetime.datetime.now(), datetime.datetime.now()) 
    cursor.execute(sql, args) 
    db.commit() 
Смежные вопросы